《比较未来的九大算法》是一本轻松的书,基本上是在手机上看完的。这本书算是一本科普书,我也确实从这里边知道了不少东西,不过还只是一些粗浅的认识,所以写个笔记。
Papage Rank和搜索引擎: 这两个技术其实是相关性很大的,Page Rank相当于一个相关度排序的算法。搜索引擎其实就是根据索引来寻找资源。想要深度的了解这些东西,可以去学习Lucene,这是一个开源的项目。
公钥加密: 公钥加密适用的场合非常多,现在的https好像就是使用的公钥加密。网络上的公钥加密和生活中的传递明信片是类似的。不过,我们希望明信、片的内容只被收件人看到。作者介绍了迪菲-赫尔曼密钥交换,下面是密钥交换的过程:
- 爱丽丝与鲍伯协定使用 p=23以及base g=5.
- 爱丽丝选择一个秘密整数a=6, 计算A = ga mod p并发送给鲍伯。
- A = 56 mod 23 = 8.
- 鲍伯选择一个秘密整数b=15, 计算B = gb mod p并发送给爱丽丝。
- B = 515 mod 23 = 19.
- 爱丽丝计算s = B a mod p
- 196 mod 23 = 2.
- 鲍伯计算s = A b mod p
- 815 mod 23 = 2.
如果 p 是一个至少 300 位的质数,并且a和b至少有100位长, 那么即使使用全人类所有的计算资源和当今最好的算法也不可能从g, p和g^a mod p 中计算出 a。这个问题就是著名的离散对数问题。
纠错码: 纠错码的本质就是利用冗余信息来发现传输错误。常见的什么奇偶校验、CRX校验还有哈希算法校验。定位算法可以一定程度上的纠正一些错误,但是不可能纠正任何情况下的错误。
数据压缩: 数据压缩分为有损压缩和无损压缩。比较常见的方法有形成长度编码,简单来说,就是把AAAA改记为A4;还有同前把戏,就是“back *, copy *”的编码方式;更短符号法就是把最常用的符号用更短的编码记录,这样总体的信息长度就可以缩短了。有损压缩主要是图像、音像文件的压缩了,这个比较好理解。数字签名:RSA是一个常用的数字签名算法。RSA算法非常简单,概述如下: 找两素数p和q 取n=p*q 取t=(p-1)*(q-1) 取任何一个数e,要求满足e<t并且e与t互素(就是最大公因数为1) 取d*e%t==1 这样最终得到三个数: n d e 设消息为数M (M <n) 设c=(M**d)%n就得到了加密后的消息c 设m=(c**e)%n则 m == M,从而完成对c的解密。 注:**表示次方,上面两式中的d和e可以互换。