math
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial
总览 这篇博客用于记录数学库的实现,
项目地址链接
先介绍我们的数学函数库 math_function 这里记录了很多数学函数,
math_function代码
重大问题 这些算法的复杂度感觉都是$lgc$级别的,应该是可以通过倍增来达到$lg(lgc)$的复杂度,我下次再仔细思考思考。
介绍我们的牛顿迭代法求$\sqrt{c}$$$\begin{aligned}&x^2=c\&f(x) = x^2-c\&f’(x) = 2x \&g(x) = x-\frac{f(x)}{f’(x)} = x-\frac{x^2-c}{2x} =\frac{x^2+c}{2x}\end{aligned}$$ 按照$x_i=g(x_{i-1})$进行迭代即可求出结果。 更新: 我下次找个机会用下面 ...
vim入门教程
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial
vim vim是一款强大的文本编辑器,如果配置到位,真的真的非常漂亮,如下图violet主题的浅色和深色
还有经典的molokai配色主题
还有c++高亮配色
c++补全
多行编辑
笔者的vim经历 先后尝试vim,笔者已经度过了两年,学到了很多,却也很少,
vim安装 以前笔者使用过linux下的vim,现在正使用的mac下的vim,这里只讲mac如何安装vim,mac本身自带vim,当然mac也可以使用指令
1brew install vim
vim基本配置 vim是需要简单配置一下的,对于没有配置的vim而言,会很难受,下面我先发一下我的vim配置
123456789101112131415161718192021222324252627282930313233343536373839404142434445set et "tab用空格替换set tab ...
heap
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial
总览这篇博客将用于整理各种堆的数据结构代码以及复杂度证明: 二叉堆、二项堆、斐波拉契堆、配对堆、左偏树、斜堆、bordal队列、B堆
注意 全部代码单对象测试通过,部分代码未实现拷贝构造函数达到深拷贝。
heap堆是一种非常重要的数据结构,在计算机科学中,堆一般指堆是根节点比子孙后代都要大(小)的一种数据结构。
项目地址链接
前置条件基本数据结构:变长数组、栈、队列、字符串的实现(此时暂未实现,使用STL代替,后面有时间会自己实现)内存池机制 { post_link 势能分析}
基类设计在这里我们暂且只设置三个接口,如果不够,我们再补充。
heap代码
binary heap二叉堆,就是我们常见的堆,也是大多数人常用的堆,二叉堆是一个完全二叉树,满足根节点的值大于(小于)子孙的值。我们设计他的时候,采取下标从1开始的数组来直接模拟,使用i,2i,2i+1之间的关系来完成边的 ...
势能分析
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial
势能分析简介 势能分析是一种常用的数据结构时间复杂度分析的手段,我们常常会定义一个势能函数,用于评价数据结构某个状态的势能,把每个操作的时间复杂度加上操作导致的势能变化作为摊还复杂度,如果经过了一系列操作以后,势能不减少,这一系列操作的时间复杂度之和不大于这一系列操作的摊还复杂度之和。
势能分析更加严谨的简介 我们对一个初始数据结构$D_0$执行$n$个操作,对于每个$i=1,2,…,n$令$C_i$为第$i$个操作的实际代价,令$D_i$为在数据结构$D_{i-1}$上执行第$i$个操作后得到的结果数据结构,势能函数$\Phi$将每个数据结构$D_i$映射到一个实数$\Phi(D_i)$,此值即为关联到数据结构$D_i$的势,第$i$个操作的摊还代价$\hat{C_i}=C_i+\Phi(D_i)-\Phi(D_{i-1})$,则$n$个操作的总摊还代价为$\sum_{i ...
矩阵的特征值与特征向量
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial
### 矩阵特征值的与特征向量
若矩阵$A$,列向量$X$,常数$\lambda$满足$AX=\lambda X$,则我们称$\lambda$是$A$的一个特征值,$X$是$A$的一个特征向量
解析解一元高次方程$det(X-\lambda E)=0$,这在X的阶很高的时候,几乎是无用的。
近似解 因为我们难以得到矩阵特征值的解析解,所以这里使用近似解来逼近。
Given变换Given变换是一种旋转变换,他的变换矩阵与单位矩阵相比只有四个元素不一样,变换矩阵如下$$\begin{aligned}\left[\begin{matrix}
&1\&&.\&&&.\&&&&.\&&&&&\cos\theta &&&&\sin\theta ...
矩阵分解
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial
矩阵的分解矩阵的分解非常重要,很多时候我们都需要使用到矩阵的分解,这会给我们提供极大的方便,笔者学习这一类问题花费了很多时间,想要看懂这一章,需要先看{ post_link 矩阵的类型及性质 }
矩阵的特征值分解要求$n*n$矩阵拥有$n$个线性无关的特征向量矩阵的特征值分解指的是利用特征值构造的矩阵进行分解。特征值与特征向量是这样定义的$$\begin{aligned}&若矩阵A,列向量X,常数\lambda满足\&AX = \lambda X\&则X为A的特征向量,\lambda为A的特征值\end{aligned}$$
这里我们注意到如果$n*n$的矩阵$A$拥有$n$个线性无关的特征向量,我们很容易就可以列出下面的式子:$$\begin{aligned}\&AX_1 = \lambda_1X_1\&AX_2 = K ...
矩阵的类型以及性质
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial
实矩阵常见的几种实矩阵有: 实对称矩阵、实反对称矩阵、厄米特矩阵、反厄米特矩阵、正交矩阵、对角矩阵、酉矩阵、正规矩阵
实对称矩阵定义若$A$为对称矩阵、则:$$\begin{aligned}A = A^{T}\end{aligned}$$这里左边为矩阵本身,右边为矩阵的转置
性质对称矩阵必然有$n$个实特征向量,并两两正交
实反对称矩阵定义若$A$为对称矩阵,则:$$\begin{aligned}A = -A^{T}\end{aligned}$$
厄米特矩阵定义若$A$为厄米特矩阵,则$$\begin{aligned}A = A^H\end{aligned}$$右边是矩阵的转置共轭矩阵
反厄米特矩阵定义若$A$为反厄米特矩阵,则$$\begin{aligned}A = -A^H\end{aligned}$$
正交矩阵定义若$A$为正交矩阵,则$$\b ...
晚期(运行期)优化
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial
解释器与编译器Java在运行的时候,他的解释器和编译器会同时工作,解释器解释运行代码,编译器有选择性地编译部分代码为机器代码,以加速Java代码的执行过程
编译器Java编译器有两种,一种是客户端编译器,他进行简单的可靠的优化,并适时加入性能检测的逻辑,另一种是服务器编译器,他进行耗时较长的优化,甚至根据性能检测信息,加入一些不可靠的激进的优化
编译器编译的对象
被多次调用的方法
被多次执行的循环体
方法
基于采样的热点探测:虚拟机周期性的检查各个线程的栈顶,如果发现某个方法经常出现在栈顶,那这就是一个热点方法,优点是简单高效,缺点是容易受到线程阻塞等其他因素的影响。
基于计数器的热点探测:为每一个方法添加一个计数器,每当方法被调用,则计数器增大1,每经过一定时间(可以与gc相关)就让计数器变为原来的一半,这是一种和式增加,积式减少的策略,这个在计算机网络中的滑动窗口大小控制也有应用, ...
LDA
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial
LDA算法输入与目的有很多有标签的高纬数据,他们的格式为列向量:
$$x = [x_1,x_2,x_3…]^T$$
我们想要找到一个高纬空间到一维空间的映射,其中$w$是一个列向量
$$y=w^T x$$
使得我们在这个新的维度上,能够完成分类,类内紧凑,类间松散
模型建立假设映射后类别i的数据集合为:
$$Y_i = {y_1,y_2,y_3…}$$
分别根据求映射后数据集合的期望
$$\tilde{m_i}=\frac{1}{n_i}\sum_{y\in Y_i}y$$
和方差
$$\tilde{S_i}^2 = \sum_{y \in Y_i}(y-\tilde{m_i})^2$$
模型建立,把类中心点间的方差作为分子,把类内方差和作为分母,我们的目标就是最大化整个分式
$$\tilde{m}=\frac{1}{n}\sum ...
早期(编译期)优化
nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial
Java 编译
解析与填充符号表过程
插入式注解处理器的注解处理过程
分析与字节码生成过程
Java 语法糖
自动拆箱装箱
遍历循环
条件编译 : 类似c++的宏
范型与类型擦除 : Java的范性和c++范型不一样,Java是用类型擦除来实现的,然后使用类型强制转化。
拆箱陷阱先看代码1234567891011121314151617class test{ public static void main(String[] args){ Integer a = 1; Integer b = 2; Integer c = 3; Integer d = 3; Integer e = 321; Integer f = 321; Long g = 3L; System.out.println(c == d); Syst ...