算法(Algorithms)三
16.贪心算法::局部最优解的合集,以实现全局最优解
17.NP 完全问题:
元素较少时算法的运行速度非常快,但随着元素数量的增加,速度会变得非常慢。
涉及“所有组合”的问题通常是NP完全问题。
不能将问题分成小问题,必须考虑各种可能的情况。这可能是NP完全问题。
如果问题涉及序列(如旅行商问题中的城市序列)且难以解决,它可能就是NP完全问题。
如果问题涉及集合(如广播台集合)且难以解决,它可能就是NP完全问题。
如果问题可转换为集合覆盖问题或旅行商问题,那它肯定是NP完全问题。
18.动态规划:处理小问题,集合起来处理大问题,但每个小问题要是离散的,不依赖于其他子问题才行
1.对于前面的背包问题,最终答案总是在最后的单元格中。但对于最长公共子串问题,答案为网格中最大的数字——它可能并不位于最后的单元格中。
2.最长公共子序列:
需要在给定约束条件下优化某种指标时,动态规划很有用。
问题可分解为离散子问题时,可使用动态规划来解决。
每种动态规划解决方案都涉及网格。
单元格中的值通常就是你要优化的值。
每个单元格都是一个子问题,因此你需要考虑如何将问题分解为子问题。
没有放之四海皆准的计算动态规划解决方案的公式。
19.KNN算法:
1.按距离归类:K系数
2.特征抽取:
3.分类:编组
4.回归:线性预测
5.余弦相似度计算:角度分类
20.二叉查找树(全O(logn):对于每个节点,该节点左边的节点都比它小,右边的节点都这个基准节点大,但左右不平衡会导致性能不佳。
1.红黑树:平衡状态的特殊二叉树
21.反向索引:通过关键字反向找到目标页面,常用于搜索引擎。
22.傅里叶变换:处理信号,如地震预测、DNA分析、音乐识别。
23.并行算法:使内核平衡分配资源
24.分布式算法:属于特殊的并行算法,如MapReduce,map:映射函数 reduce:归并函数
1.映射函数map:接受一个数组,并对其进行处理转换为另一个数组,使用多台计算机同时处理
2.归并函数reduce:将多项归并为一项
25.布隆过滤器:一种概率型数据结构,判断网页是否已经搜集,散列表的答案绝对可靠,布隆过滤器的答案不绝对可靠,但可能规避恶意网站,且占用存储空间小。
26.Hyperloglog:HyperLogLog近似地计算集合中不同的元素数,与布隆过滤器一样,它不能给出准确的答案,但也八九不离十,而占用的内存空间却少得多。
27:SHA算法:安全散列算法函数,给定一个字符串,返回其散列值
1.通过计算散列值来比较文件是否相同
2.网站密码本质上是网站服务器计算输入值的散列值,同数据库中的散列值进行比较
3.散列值无法转换成原始字符串
4.目前完善的SHA算法:SHA-2、SHA-3
5.最安全的密码散列函数:bcrypt
6.局部不敏感
Simhash算法:
1.局部敏感
2.通过比较散列值来判断两个字符的相似程度
3.检查两项内容的相似程度
4.用途:1.判断网页是否已搜集 2.判断文章是否来自于网上 3.判断用户上传的文档是否与有版权内容类似,从而拒绝
Diffie-Hellman算法:
1.两个密钥:公钥和私钥。公钥就是公开的,可使用其他任何方式来发布。使用公钥对对象进行加密。加密后的消息只有使用私钥才能解密。