Loading...
在学习完堆栈数据结构后,我们很容易两个利用具有LIFO特性的栈——操作数栈、操作符栈实现中缀表达式向后缀表达式的转换,而后缀表达式也只用借助一个操作数栈便可快速求值。但书上一幅有关表达式树的图片引起了我的注意,我们要如何实现这样的表达式树呢?一顿操作之后按照这篇实现JavaScript的eval()的表达式树教程实现了C++的表达式解析。下面附上我对此js代码的C++复刻版。// // Cr...
KMP算法避免了朴素算法中指针的完全回溯,而是利用起了字符串失配后算法已知的信息,实现了待匹配串指针不回退,模式串指针回归由下文提及的next数组计算得出...
这学期开设的《数据结构与算法》课程内容都快过半了,这里挖个坑总结一下在算法复杂度方面的一些内容。一些标记法大 $O$ 标记法:若存在常数$k,n_0$,使得算法在解决问题规模$n$在$n \ge n_0$时,其需要的步骤数小于等于$k\times f(n)$,则称算法的时间复杂度可由$O(f(n))$表示。小 $o$ 标记法:上述表述中“小于等于”换为“小于”。大$\Omega$标记法:上述...
列表生成式是一项非常Pythonic的编程技巧,其可以使复杂的逻辑代码变得异常简洁,也算得上是如今编程语言中较有特点的一项功能,如[x ** x for ...
特征值和特征向量的定义如下:上式证明使用了:$U^TU=I, \Sigma^T\Sigma=\Sigma^2$。可以看出$A^{T}A$的特征向量组成的的确就是我们SVD中的V矩阵。类似的方法可以得到$AA^{T}$的特征向量组成的就是我们SVD中的U矩阵。进一步我们还可以看出我们的特征值矩阵等于奇异值矩阵的平方,也就是说特征值和奇异值满足如下关系:$\sigma_i = \sqrt{\la...