一、回溯
# 关键代码
i = i - j + 1;
# i 为主串元素下标, j 为匹配串下标
# 回溯导致算法效率低下
二、贪心
总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。
贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。
例:1元,5元,10元
要求:14元最少几张钞票?(一张十元,四张1元);抽最大的数。
特点,金额都是倍数关系
如果不是倍数就不能选最大的了,如:存在7元的金额钞票
三、时间复杂度
(1)log n 的时间复杂度怎么推导来的?
答:根据对数法则:如果一个算法用常数时间(O(1)将问题的大小削减为其一部分(通常是1/2),那么该算法就是 O(log N)
。
代码举例:
count = 1
while (count < n) {
count *= 2;
}
// 总共执行多少次,就是求乘以多少个2,退出循环。
// 2x = n --> x = log2n (2的x次幂等于n 推导出 x = 以2为底的log n)
四、堆排序
堆排序的堆是一种近似二叉树的结构,但却不是二叉树。是vector类型的线性链表。
待更新。。。