1. 矩阵的特征值
构造|A-λE|=0方程;-->求解出λ1、λ2...λn; -->λi即为特征值--> 求解特征解
2. 卷积:给定输入图像尺寸H*W及卷积核大小F*F、步长S、padding等,计算输出图像的尺寸;
h_out = (H-F+2*P)/S +1
w_out = (W-F+2*P)/S+1
3. 快速排序的复杂度计算
3.1 时间复杂度
1.) 常数阶O(1)
无论代码执行了多少行,只要是没有循环等复杂结构,那这个代码的时间复杂度就都是O(1),如:
1 int i = 1; 2 int j = 2; 3 ++i; 4 j++; 5 int m = i + j;
上述代码在执行的时候,它消耗的时候并不随着某个变量的增长而增长,那么无论这类代码有多长,即使有几万几十万行,都可以用O(1)来表示它的时间复杂度。
2.) 对数阶O(logN)
1 int i = 1; 2 while(i<n) 3 { 4 i = i * 2; 5 }
从上面代码可以看到,在while循环里面,每次都将 i 乘以 2,乘完之后,i 距离 n 就越来越近了。我们试着求解一下,假设循环x次之后,i 就大于 2 了,此时这个循环就退出了,也就是说 2 的 x 次方等于 n,那么 x = log2^n
也就是说当循环 log2^n 次以后,这个代码就结束了。因此这个代码的时间复杂度为:O(logn)
3.) 线性对数阶O(nlogN)
线性对数阶O(nlogN) 其实非常容易理解,将时间复杂度为O(logn)的代码循环N遍的话,那么它的时间复杂度就是 n * O(logN),也就是了O(nlogN)。
就拿上面的代码加一点修改来举例:
for(m=1; m<n; m++) { i = 1; while(i<n) { i = i * 2; } }
4.) 平方阶O(n²)
平方阶O(n²) 就更容易理解了,如果把 O(n) 的代码再嵌套循环一遍,它的时间复杂度就是 O(n²) 了。
举例:
1 for(x=1; i<=n; x++) 2 { 3 for(i=1; i<=n; i++) 4 { 5 j = i; 6 j++; 7 } 8 }
这段代码其实就是嵌套了2层n循环,它的时间复杂度就是 O(n*n),即 O(n²)
如果将其中一层循环的n改成m,即:
for(x=1; i<=m; x++) { for(i=1; i<=n; i++) { j = i; j++; } }
那它的时间复杂度就变成了 O(m*n)
5.) 立方阶O(n³)、K次方阶O(n^k)
参考上面的O(n²) 去理解就好了,O(n³)相当于三层n循环,其它的类似。
除此之外,其实还有 平均时间复杂度、均摊时间复杂度、最坏时间复杂度、最好时间复杂度 的分析方法,有点复杂,这里就不展开了。
4.) 贝叶斯概率
Coding编程:
1. Task][2021-Q1] A string in Matrix
Problem
Whether the matrix contains the given string in order. The start position can be anywhere inside the matrix and each step can *only* move *one* grid to the up, down, left or right.
For example, the following matrix contains a path “bfce” which is marked with bold
[["a","*b*","c","e"],
["s","*f*","*c*","s"],
["a","d","*e*","e"]]
But there is no such “abfb” string, because a position cannot be reentered once been recorded.
2. rand5() 已知,计算rand()7