数学之美,一看到这书名我就心生畏惧,不敢往下翻。没办法,读书阶段被数学打击得不成样子。但是这本书,真的是个惊喜和奇迹:它不仅吸引我一直读完,而且让我深深后悔当初没有好好学线性代数。原来计算机界的一些难题,如机器翻译、索引原理、搜索排序等,都通过简单的数学原理实现的。
读完整本书,觉得收获颇丰,也长了很多见识。但为免遗忘,抽空整理下这些知识,留待以后回想起来不那么费力 :D
第一章:数学的诞生
最开始的世界,人们用彼此约定好的几种简单的声音进行通信,由此慢慢衍生出语言和文字。由于那时物质匮乏,人们只有多和少的概念。当人们意识到5和8不一样的时候,才有了计数的需求,而数字是计数的基础。
很可能是因为人类有十个指头,十进制才成为现今最通用的进制。
玛雅人用的就是二十进制。玛雅人的一个世纪是400年,他们称之为一个太阳纪。2012是一个太阳纪的结束,2013是新的太阳纪的开始。
说说罗马的计数规则(英语试卷上的题目序号就是罗马数字,我一直一直不清楚IV是4还是6,现在终于连原理都知道了。)
计数单位:I(个),V(5),X(10),L(50),C(100),D(500),M(1000),再往上就没有了。
计数规则:小数放大数左边代表“大数-小数”;小数放大数右边代表“大数+小数”。
如IV(4),VII(7),IIXX(18)
最有效的是古印度人,他们发明了0到10的阿拉伯数字,后来被阿拉伯人传入欧洲,广泛应用。囧。原来阿拉伯数字是古印度人发明的啊!
阿拉伯数字跟文字完全分离了,从此数学和语文就越走越远啦~~~~~~~~~~~~
第二章:自然语言的处理——基于规则的自然语言到基于统计的自然语言
要让计算机读懂自然语言并进行相关处理,最开始的科学家认为要让计算机像人一样学习句子的语义、构成规则等。并为之努力了很多年,没太大的进展。(因为句法的构成规则太多,而且生活中许多句子也并不符合规则)
到后来有了基于统计的思想,并尝试了几年,结果方法正确了,进展很大,而且处理效果非常好。基于统计的自然语言处理是如何做的呢?
①假定句子S是由w1,w2...wn个字组成
②判断这个句子可能出现的概率。(第一个字出现的概率*在第一个字出现的前提下第二个字出现的概率*在第n-1个字都出现的情况下,第n个字出现的概率)数学公式如下
P(S)=P(w1,w2,...wn)=P(w1)*P(w2|w1)*P(w3|w1,w2)*……P(wn|w1,w2,...wn-1)
③但这计算是在太复杂了,于是有了马尔可夫假设(假定第n个字出现的概率,只与它的前一个字有关),于是公式变成了:
P(S)=P(w1,w2,...wn)=P(w1)*P(w2|w1)*P(w3|w2)*……P(wn|wn-1)
④经过一系列的概率计算,最终得到的
P(Wi|Wi-1)=#(wi-1,wi)/#(wi-1)
#(wi-1,wi)表示wi-1,wi这对词在语料库中前后相邻出现了多少次
#(wi-1)表示wi-1这个字在语料库中出现了多少次
第三章:网络爬虫
一个网页有到多个页面的链接,多个页面中又有到别的网页的链接,这个看起来非常复杂的结果,用“图”来表示就可以了。可以把每个节点想象成一个网页,节点之间的弧想象成网页之间的连接关系。遍历图的过程,就是爬虫爬网页的过程。
图的遍历有深度优先遍历(Deep-First Search)和广度优先遍历(Breadth-First Search)。哪种更优呢?
DFS是先把一个节点的子节点遍历一遍,再遍历同级节点。这样可以减少握手的时间。
BFS是先遍历第一层节点,再遍历每个节点的第二层节点。这样可以先遍历主要的网页。因为层次越深网页重要性越低。
可以说,这两种做法各有优势,在爬虫算法中都会用到。如何调度很关键。
第四章:PageRank——google的民主表决式网页排名技术
如何确定网页的排名呢?PageRank算法认为,一个网页如果被很多其他网页链接,说明这个网页收到普遍的承认和信赖,那么他的排名就高。
一个网页的排名等于所有指向这个网页的其他网页X1,X2,X3的权重之和。
如网页A=0.01(X1) + 0.14(X2) + 0.23(X3)=0.38
0.01是X1的本身权重,也就是参与计算的网页的权重是自身权重,不包括其它网站的链接。这就像个绕来绕去的怪圈,有点奇怪了是不?
他们通过二维矩阵的迭代解决了这个问题,假设最开始所有网页排名相同,是某个初始值,然后怎么算出来的。但是我看不懂了,所以好后悔当初没学好矩阵啊。
第五章:网页查询的相关性
搜索关键词的科学度量 TF-IDF(Term Frequency/ Inverse Document Frequency 词频/逆文本频率指数)
比如搜索 关键词“科学的”。
“科学”一词在全文出现的次数的频率,如全文1000字,有10次科学,则词频是10/1000。但是“的”的词频比“科学”肯定要高,但它并不能为查询提供有用的信息,所以要有IDF。
IDF的计算方法是:假如有1000网页,“科学”一词在20个网页中出现,它的IDF就是log(20/1000)。“的”每篇文章都有,它的IDF是log(1000/1000)=0,权重是零。
TF*IDF的结果就是相关程度了。
其他
地图中判断输入地址是否合理就用到了有限状态机;贝叶斯网络理解的不是很清楚;索引的查找用到了布尔运算;还有垃圾邮箱的判断,用到了布隆过滤器;以及现代的密码学,公钥和私钥。这些记得不是很清楚啦,也懒得写了~that's all.