一些有趣的算法:
回顾 数组+二分查找 简介了 二叉查找树(binary search tree)的数据结构.
反向索引 很有用的数据结构: 一个散列表,将单词映射到包含它的页面。这种数据结构被称为反向索引(inverted index),常用于创建搜索发动机。
傅里叶变换非常适用于处理信号,可使用它来压缩音乐。首先将音频文件分解为音符,傅里叶变换能准确地指出各个音符对整个歌曲的贡献,让你能够把不重要的音符删除。这就是MP3的工作原理。JPG也是一种压缩格式,也用到了上述的工作原理。
可扩展性与海量处理:
并行算法,多核也难以多倍提升速度:
并行性管理开销。
负载均衡。
特殊的算法——分布式算法MapReduce:
映射(map)函数:
归并(reduce)函数:
布隆过滤器和HyperLogLog(占用内存空间少,预测结果比较准确,用来处理海量数据):
布隆过滤器是概率型数据结构
可能错报 报搜集过实际上未搜集
不可能漏报 举例;这个网站未搜集就肯定未搜集
HyperLogLog 一种类似于布隆过滤器的算法:
SHA算法 (局部不敏感,稍微修改就会生成大不同的散列值):
安全散列算法(secure hash algorithm,SHA)函数 根据一个字符串生成另一个字符串(散列值)
密码登录 时,可以通过比较散列值。存储在 数据库中的 散列值 和 用户密码生成的 散列值 做比较
simhash (局部敏感,可以查重文章之类的)
Diffie-Hellman密钥交换
双方无需知道加密算法,不必会面协商要使用的加密算法
要破解加密的消息比登天还难
Diffie-Hellman:公钥和私钥。
公钥加密再发布,接收的人用私钥进行解密得知解密信息。替代者为RSA。
线性回归:
线性规划用于在给定约束条件下最大限度地改善指定的指标。
所有的图算法都可以用线性规划来实现。线性规划师宽泛得多的框架,图问题只是其中的一个子集。
线性规划使用simplex算法,这个算法比较复杂,此书没有介绍。