傅一平:数学中的“罗辑思维”

所以叫数学的”罗辑思维“,是因为吴军老师属于数学界的罗振宇,能够把一些概念说得通俗易懂,由于一本书太厚,我就再精简一下,汇集成一篇文章。

从小就在学数学,但长大以后,数学的作用似乎也仅限于数数,从中学,大学到研究生,从方程式、微积分、线性代数到小波,从没有发现学习数学于我的生活,于我理解这个世界有什么关系,偶然有次机会读吴军博士的《数学之美》一书,才发现数学,远比自己想象的有用,甚至有趣,当第二次阅读的时候,觉得有必要把一些有趣的东西写出来,书中有很多的“道”,没有很多的“术”,对于我们理解这个世界很有帮助,为了自己的孩子,也建议读读这本书,在他长大的时候推荐一下,数学可以很有趣。如果觉得读了有用,转发的同时也去买一本哦,发现吴军老师偶偶还上上锵锵三人行,可以关注下。

傅一平:数学中的“罗辑思维”

本文的素材大多来自于这本书,笔者只是摘取了其中几个有趣的例子。所以叫数学的”罗辑思维“,是因为吴军老师属于数学界的罗振宇,能够把一些概念说得通俗易懂,由于一本书太厚,我就再精简一下,汇集成一篇文章。

Part 1 微信文章如何防盗版?

微信公众号现在有个功能,就是防止文章被盗用,我曾经想在两个公众号发同一篇文章,但发现发布第二篇文章时总是提示盗用了第一篇文章,我尝试着改小部分内容,但没啥用,因此我觉得很好奇,想,腾讯这个防盗版到底是如何做的呢?直到我读了这本书,才大致知道了原理,劝大家放弃盗版的尝试……

信息指纹先要学习点简单的基础知识,大家在百度上查找“吴军数学之美”,对应的网址长度均在100个字符以上,网址字符串实际上在计算机中可以看成一个特殊的、很长的整数(每个字母都可以用数字编码),假如全球有5000亿个网址,则存储这些网址本身需要50TB, 假如一台服务器内存是50GB,也需要2000台服务器来存在这些内容,由于网址长度不固定,以字符串的形式查询,效率会很低。若能找到一个函数,将这5000亿个网址随机映射到128位二进制(即128比特),也就是16个字节的整数空间,这样每个网址就只需要占用16个字节而不是原来的100个,这样就能把存储网址的内存需求量降至原来的1/6不到,这个16个字节的随机数,就称作该网址的信息指纹。

可以证明,只要产生的随机数的算法足够好,就能保证几乎不可能有两个字符串的指纹相同,由于指纹是固定的128位二进制整数,因此,查找的计算量与字符串相比,要小得多。比如我们熟知的网络爬虫在下载网页时,它将访问过的网页地址变成一个个信息指纹,存在哈希表中,每当遇到一个新网址,计算机就计算出它的指纹,以防止重复下载,效率较字符串的方式提升10倍以上。

信息指纹的用途在网页搜索时,要判断两个查询用词是否完全相同(但是次序可能不同),比如“北京 中关村 星巴克”和“星巴克 北京 中关村”,用词完全相同,更普遍的讲法是判断两个集合是否相同,解决这个问题有各种办法,区别在于效率。最直接的笨办法是对这个集合中的元素一一做比较,这个方法复杂度最高O(N*N),稍好一点的办法是将两个集合的元素分别排序,然后顺序比较,这样计算时间的复杂度是O(NlogN)。

完美的方式就是计算这两个集合的指纹,然后直接进行比较,我们定义一个集团S={e1,e2…eN}的指纹FP(S)=FP(e1)+ FP(e2)+…FP(eN),其中FP(e1),FP(e2),…FP(eN) 分别为S中这些元素对应的指纹,由于加法的交换率,保证集合的指纹不因元素出现的次序而改变,如果两个集合的元素相同,那么它们的指纹一定相同。利用信息指纹的方法计算的复杂度是O(N)。

当然有人会问,可能两个网页有少些不同,不就没法判断是否相同了,其实办法也很简单,无需从头到尾,我们只需对每个网页挑选出几个词,这些词构成网页的特征,然后计算和比较这些特征集合的信息指纹就可以了。

具体的判断文章抄袭的判断也大致相同,只要将文章划分成小片段,然后对这些片段用上述方法选择特征词的集合,计算并比较指纹即可;又比如视频网站防盗版也变得简单,只要简单的抽取视频的关键帧,比较关键帧的信息指纹就可以判断是否是盗版还是拷贝。

因此,前面我提到的微信公众号文章盗版问题,相信腾讯也采用了类似的方法,由于关键字提取的不确定性,你要绕开信息指纹的监测其实很难的,这也是我们小幅改动文章没法通过审核的原因。

Part 2 信息熵是个神马东西?

当前是信息时代,我们每天都在谈论信息,但是信息这个概念依然有些抽象,我们常常说信息很多,或者信息较少,但却很难说清楚信息到底有多少,比如一本50万字的中文书《史记》到底有多少信息量,直到1948年,香农提出了“信息熵”的概念,才解决了信息的度量问题。可以认为,信息量就等于不确定性的多少。但说实话,很多人都大概知道这个定义,但并不形象。

那么如何量化信息的度量呢?来看一个例子你就懂了,2010年举行了世界杯足球赛,大家都很关心谁会是冠军。假如我错过了看世界杯,赛后我问一个知道比赛结果的观众“哪只球队是冠军”?他不愿意直接告诉我,而让我猜,并且我每猜一次,他要收一块钱才肯告诉我是否猜对了,那么我需要付给他多少钱才能知道谁是冠军呢?我可以把球队编上号,从1到32,然后提问:“冠军的球队在1-16号中吗?“,假如他告诉我猜错了,我自然知道冠军队在9-16号中,这样只需要五次,我就能知道哪只球队是冠军。所以,谁是世界杯冠军这条消息的信息量只值5块钱。

当然,香农不是用钱,而是用”比特“(Bit)这个概念来度量信息量。一个比特是一位二进制数,计算机中的一个字节是8比特。在上面的例子中,这条信息的信息量是5比特。读者可能已经发现,信息量的比特数和所有可能情况的对数函数log有关。

你可能认为实际上不需要猜五次就能猜出谁是冠军,因为像西班牙、巴西、德国、意大利这样的球队得冠军的可能性比日本、南非等球队大得多,因此,第一次猜测时不需要把32支球队等分成两个组,而可以把少数几只最可能的球队分成一组,把其他队分成另一组。然后猜冠军球队是否在那几只热门队中。重复这样的过程,根据夺冠概率对剩下的候选球队分组,直至找到冠军队。这样,也许三次或四次就猜出结果。因此,当每只球队夺冠的可能性(概率)不等时,”谁是世界杯冠军“的信息量比5比特少。香农指出,它的准确信息量应该是

 

H=-(p1*logp1+p2*logp2+…+p32*logp32)

有了“熵”这个概念,就可以回答本文开始提出的问题,即一本50万字的中文书平均有多少信息量。我们知道,常用的汉字大约有7000字,假如每个字等概率,那么大约需要13比特表示一个汉字。但汉字的使用是不平衡的,实际上,前10%的汉字占常用文本的95%以上。因此,即使不考虑上下文的相关性,而只考虑每个汉字的独立概率,那么,每个汉字的信息熵大约也只有8-9比特。如果考虑上下文相关性,则每个汉字的信息熵就只有5比特左右。所以,一本50万字的中文书,信息量大约是250万比特。如果用一个好的算法压缩一下,整本书可以存成一个320KB的文件。有了信息论,其实我们就有了指引,比如压缩比是受信息熵制约的。

Part 3 统计是语音识别的救世主?

长期以来,人类一直梦想着能让机器代替人来翻译语言、识别语音、认识文字(不论是印刷体或手写体)和进行海量文献的自动检索,这就需要让机器理解语言。但是人类的语言可以说是信息里最复杂最动态的一部分。为了解决这个问题,人们容易想到的办法就是让机器模拟人类进行学习 – 学习人类的语法、分析语句等等。尤其是在乔姆斯基(Noam Chomsky 有史以来最伟大的语言学家)提出 “形式语言” 以后,人们更坚定了利用语法规则的办法进行文字处理的信念。遗憾的是,几十年过去了,在计算机处理语言领域,基于这个语法规则的方法几乎毫无突破。

其实早在几十年前,数学家兼信息论的祖师爷香农 (Claude Shannon)就提出了用数学的办法处理自然语言的想法。遗憾的是当时的计算机条件根本无法满足大量信息处理的需要,所以他这个想法当时并没有被人们重视。七十年代初,有了大规模集成电路的快速计算机后,香农的梦想才得以实现。

首先成功利用数学方法解决自然语言处理问题的是语音和语言处理大师贾里尼克 (Fred Jelinek)。当时贾里尼克在 IBM 公司做学术休假 (Sabbatical Leave),领导了一批杰出的科学家利用大型计算机来处理人类语言问题。统计语言模型就是在那个时候提出的。

给大家举个例子:在很多涉及到自然语言处理的领域,如机器翻译、语音识别、印刷体或手写体识别、拼写纠错、汉字输入和文献查询中,我们都需要知道一个文字序列是否能构成一个大家能理解的句子,显示给使用者,比如:

美联署主席本.伯南克昨天告诉媒体7000亿美元的援助资金将借给上百家银行、保险公司和汽车公司。

这句话就很通顺,意思也很明白。如果改变一些词的顺序,或者替换掉一些词,将这句话变成:

本.伯南克美联署主席昨天7000亿美元的援助资金告诉媒体将借给银行、保险公司和汽车公司上百家。

意思就含混了,虽然多少还能猜到一点。但是如果再换成:

联主美储席本.伯体南将借天的救克告媒昨助资金70元亿00美给上百百百家银保行、汽车险公司公司和。

基本上读者就不知所云了。

如果问一个没学过自然语言处理的人为什么会变成这样,他可能会说,第一个句子合乎语法,语义清晰,第二个句子不合语法,但是语义还清晰,第三个句子连语义都不清晰了。20世纪70年底以前,科学家也是这么想的,试图判断文字序列是否合乎文法,含义是否正确等。但这条路走不通,而贾里尼克不走寻常路,用一个简单的统计模型漂亮的搞定了他。贾里尼克的出发点很简单,一个句子是否合理,就看看它的可能性大小如何。

如 果 S 表示一连串特定顺序排列的词 w1, w2,…, wn ,换句话说,S 可以表示某一个由一连串特定顺序排练的词而组成的一个有意义的句子。现在,机器对语言的识别从某种角度来说,就是想知道S在文本中出现的可能性,也就是数学上所说的S 的概率用 P(S) 来表示。利用条件概率的公式,S这个序列出现的概率等于每一个词出现的概率相乘,于是P(S) 可展开为:

P(S) = P(w1)P(w2|w1)P(w3| w1 w2)…P(wn|w1 w2…wn-1)

其中P (w1) 表示第一个词w1 出现的概率;P (w2|w1) 是在已知第一个词的前提下,第二个词出现的概率;以次类推。不难看出,到了词wn,它的出现概率取决于它前面所有词。从计算上来看,各种可能性太多,无法实现。因此我们假定任意一个词wi的出现概率只同它前面的词 wi-1 有关(即马尔可夫假设),于是问题就变得很简单了。现在,S 出现的概率就变为:

P(S) = P(w1)P(w2|w1)P(w3|w2)…P(wi|wi-1)…

(当然,也可以假设一个词又前面N-1个词决定,模型稍微复杂些。)

接下来的问题就是如何估计 P (wi|wi-1)。现在有了大量机读文本后,这个问题变得很简单,只要数一数这对词(wi-1,wi) 在统计的文本中出现了多少次,以及 wi-1 本身在同样的文本中前后相邻出现了多少次,然后用两个数一除就可以了,P(wi|wi-1) = P(wi-1,wi)/ P (wi-1)。

事实证明,统计语言模型比任何已知的借助某种规则的解决方法更有效。在 Google 的中英文自动翻译中,用的最重要的就是这个统计语言模型。很多年前美国标准局(NIST) 对所有的机器翻译系统进行了评测,Google 的系统是不仅是全世界最好的,而且高出所有基于规则的系统很多。

现在,读者也许已经能感受到数学的美妙之处了,它把一些复杂的问题变得如此的简单。当然,真正实现一个好的统计语言模型还有许多细节问题需要解决。贾里尼克和他的同事的贡献在于提出了统计语言模型,而且很漂亮地解决了所有的细节问题。十几年后,李开复用统计语言模型把 997 词语音识别的问题简化成了一个 20 词的识别问题,实现了有史以来第一次大词汇量非特定人连续语音的识别。

同样道理,统计语言模型也被用来进行句子的分词,其效果也远远好于查字典,特别能解决传统分词方法的二义性问题,比如,对短语 “发展中国家” 正确的分割是“发展-中-国家”,而从左向右查字典的办法会将它分割成“发展-中国-家”,显然是错了。另外,并非所有的最长匹配都一定是正确的。比如 “上海大学城书店”的正确分词应该是 “上海-大学城-书店,” 而不是 “上海大学-城-书店”,90年前后,清华大学的郭进博士用统计语言模型成功解决分词二义性问题,将汉语分词的错误率降低了一个数量级。

Part 4 小索引反映大道理?

大部分使用搜索引擎的人都会吃惊为什么它能在零点零几秒钟找到成千上万甚至上亿的搜素结果,显然,如果是扫描所有文本,计算机再快也不可能做到这一点,这里面的技巧就是建索引,这根图书馆的索引卡片是同样的道理。

最简单索引的结构是用一个很长的二进制数表示一个关键字是否出现在每篇文献中。有多少篇文献,就有多少位数,每一位对应一篇文献,1 代表相应的文献有这个关键字,0 代表没有。比如关键字“原子能”对应的二进制数是0100100001100001…,表示第二、第五、第九、第十、第十六篇文献包含着个关键字。注意,这个二进制数非常之长。同样,我们假定“应用”对应的二进制数是 0010100110000001…。那么要找到同时包含“原子能”和“应用”的文献时,只要将这两个二进制数进行布尔运算 AND。根据上面的真值表,我们知道运算结果是0000100000000001…。表示第五篇,第十六篇文献满足要求。

注意,计算机作布尔运算是非常非常快的。现在最便宜的微机都可以一次进行三十二位布尔运算,一秒钟进行十亿次以上。当然,由于这些二进制数中绝大部分位数都是零,我们只需要记录那些等于1的位数即可。于是,搜索引擎的索引就变成了一张大表:表的每一行对应一个关键词,而每一个关键词后面跟着一组数字,是包含该关键词的文献序号。

对于互联网的搜索引擎来讲,每一个网页就是一个文献。互联网的网页数量是巨大的,网络中所用的词也非常非常多。因此这个索引是巨大的,在万亿字节这个量级。早期的搜索引擎(比如 Alta Vista 以前的所有搜索引擎),由于受计算机速度和容量的限制,只能对重要的关键的主题词建立索引。至今很多学术杂志还要求作者提供 3-5 个关键词。这样所有不常见的词和太常见的虚词就找不到了。现在,为了保证对任何搜索都能提供相关的网页,所有的搜索引擎都是对所有的词进行索引。为了网页排名方便,索引中还需存有大量附加信息,诸如每个词出现的位置、次数等等。因此,整个索引就变得非常之大,以至于不可能用一台计算机存下。大家普遍的做法就是根据网页的序号将索引分成很多份(Shards),分别存储在不同的服务器中。每当接受一个查询时,这个查询就被分送到许许多多服务器中,这些服务器同时并行处理用户请求,并把结果送到主服务器进行合并处理,最后将结果返回给用户。

Part 5 搜素的网页如何排名?

对于大部分用户的查询,今天的搜索引擎,都会返回成千上万条结果,那么,如何排序?总的来讲,对于一个特定的查询,搜索结果排名取决于两组信息,这个网页的质量信息,查询与每个网页的相关性。

网页的质量排名大家可能知道,Google革命性的发明是它名为“PageRank”的网页排名算法,这项技术在1998年前后使得搜索的相关性有了质的飞跃,圆满的解决了以往网页搜索结果中排序不好的问题,在互联网上,如果一个网页被很多其它网页所链接,说明它受到普遍的承认和信赖,那么它的排名就高,这就是PageRank的核心思想,当然Google的PageRank算法实际上要复杂得多。比如说,对来自不同网页的链接区别对待,因为网页排名高的那些网页的链接更可靠,于是要给这些链接以较大的权重。

理论问题解决后,又遇到实际问题。因为互联网上网页数量是巨大的,PageRank的计算量越来越大,必须利用多台服务器才能完成。2003年,Google的工程师发明了MapReduce这个并行计算的工具,PageRank的计算完全自动化了,大大缩短了计算时间。

网页排名的高明之处在于它把整个互联网当成一个整体来对待,这无意识中符合了系统论的观点,相比之下,以前的信息检索大多把每一个网页当作独立的个体对待,大部分人当初只注意了网页内容和查询语句的相关性,忽略了网页之间的关系,这使得Google能够迅速打败以前所有的搜索引擎,现如今,一个新的搜索引擎在技术上投入再大,可提升的空间也非常有限了,这也是微软等在搜索引擎上难有作为的原因。

网页和查询的相关性前面讲了索引,如何衡量网页质量(PageRank), 接下来谈谈如何确定一个网页和某个查询的相关性,现在任何一个搜索引擎都包含几十万甚至是上百万个多少有点关系的网页。那么哪个应该排在前面呢?显然我们应该根据网页和查询关键字(比如“原子能的应用”)的相关性对这些网页进行排序。因此,这里的关键问题是如何度量网页和查询的相关性。

我们知道,短语“原子能的应用”可以分成三个关键词:原子能、的、应用。根据我们的直觉,我们知道,包含这三个词多的网页应该比包含它们少的网页相关。当然,这个办法有一个明显的漏洞,就是长的网页比短的网页占便宜,因为长的网页总的来讲包含的关键词要多些。因此我们需要根据网页的长度,对关键词的次数进行归一化,也就是用关键词的次数除以网页的总字数。我们把这个商称为“关键词的频率”,或者“单文本词汇频率”(Term Frequency),比如,在某个一共有一千词的网页中“原子能”、“的”和“应用”分别出现了 2 次、35 次 和 5 次,那么它们的词频就分别是 0.002、0.035 和 0.005。 我们将这三个数相加,其和 0.042 就是相应网页和查询“原子能的应用”

相关性的一个简单的度量。概括地讲,如果一个查询包含关键词 w1,w2,…,wN, 它们在一篇特定网页中的词频分别是: TF1, TF2, …, TFN。 (TF: term frequency)。 那么,这个查询和该网页的相关性就是:

TF1 + TF2 + … + TFN。

读者可能已经发现了又一个漏洞。在上面的例子中,词“的”站了总词频的 80% 以上,而它对确定网页的主题几乎没有用。我们称这种词叫“应删除词”(Stopwords),也就是说在度量相关性是不应考虑它们的频率。在汉语中,应删除词还有“是”、“和”、“中”、“地”、“得”等等几十个。忽略这些应删除词后,上述网页的相似度就变成了0.007,其中“原子能”贡献了0.002,“应用”贡献了 0.005。

细心的读者可能还会发现另一个小的漏洞。在汉语中,“应用”是个很通用的词,而“原子能”是个很专业的词,后者在相关性排名中比前者重要。因此我们需要给汉语中的每一个词给一个权重,这个权重的设定必须满足下面两个条件:

  • 一个词预测主题能力越强,权重就越大,反之,权重就越小。我们在网页中看到“原子能”这个词,或多或少地能了解网页的主题。我们看到“应用”一次,对主题基本上还是一无所知。因此,“原子能“的权重就应该比应用大。
  • 应删除词的权重应该是零。

我们很容易发现,如果一个关键词只在很少的网页中出现,我们通过它就容易锁定搜索目标,它的权重也就应该大。反之如果一个词在大量网页中出现,我们看到它仍然不很清楚要找什么内容,因此它应该小。概括地讲,假定一个关键词 w 在 Dw 个网页中出现过,那么 Dw 越大,w 的权重越小,反之亦然。在信息检索中,使用最多的权重是“逆文本频率指数” (Inverse document frequency 缩写为IDF),它的公式为log(D/Dw)其中D是全部网页数。比如,我们假定中文网页数是D=10亿,应删除词“的”在所有的网页中都出现,即Dw=10亿,那么它的IDF=log(10亿/10亿)= log (1) = 0。假如专用词“原子能”在两百万个网页中出现,即Dw=200万,则它的权重IDF=log(500) =6.2。又假定通用词“应用”,出现在五亿个网页中,它的权重IDF = log(2),则只有 0.7。也就只说,在网页中找到一个“原子能”的比配相当于找到九个“应用”的匹配。利用 IDF,上述相关性计算个公式就由词频的简单求和变成了加权求和,即 TF1*IDF1 + TF2*IDF2 +… + TFN*IDFN。在上面的例子中,该网页和“原子能的应用”的相关性为 0.0161,其中“原子能”贡献了 0.0126,而“应用”只贡献了0.0035。这个比例和我们的直觉比较一致了。

有关网页的综合排名大致由相关性和网页排名的乘积决定,现在的搜索引擎对TF-IDF进行了不少优化,使得相关性度量更加准确了,如果一个搜索引擎爱好者,懂得利用TF-IDF和网页排名(PageRank)算法来研发一个搜索引擎,它做的效率不会比主流的差多少。

Part 6 基于余弦定理的新闻分类?

余弦定理和新闻的分类似乎是两件八杆子打不着的事,但是它们确有紧密的联系。具体说,新闻的分类很大程度上依靠余弦定理。

Google 的新闻是自动分类和整理的。所谓新闻的分类无非是要把相似的新闻放到一类中。计算机其实读不懂新闻,它只能快速计算。这就要求我们设计一个算法来算出任意两篇新闻的相似性。为了做到这一点,我们需要想办法用一组数字来描述一篇新闻。

我们来看看怎样找一组数字,或者说一个向量来描述一篇新闻。回忆一下我们在“如何度量网页相关性”一文中介绍的TF/IDF 的概念。对于一篇新闻中的所有实词,我们可以计算出它们的单文本词汇频率/逆文本频率值(TF/IDF)。不难想象,和新闻主题有关的那些实词频率高,TF/IDF 值很大。我们按照这些实词在词汇表的位置对它们的 TF/IDF 值排序。比如,词汇表有六万四千个词,分别为

单词编号 汉字词

1 阿

2 啊

3 阿斗

4 阿姨

789 服装

….

64000 做作

在一篇新闻中,这 64,000 个词的 TF_IDF 值分别为

单词编号 TF_IDF 值

1 0

2 0.0034

3 0

4 0.00052

5 0

789 0.034

64000 0.075

如果单词表中的某个次在新闻中没有出现,对应的值为零,那么这 64,000 个数,组成一个64,000维的向量。我们就用这个向量来代表这篇新闻,并成为新闻的特征向量。如果两篇新闻的特征向量相近,则对应的新闻内容相似,它们应当归在一类,反之亦然。

学过向量代数的人都知道,向量实际上是多维空间中有方向的线段。如果两个向量的方向一致,即夹角接近零,那么这两个向量就相近。而要确定两个向量方向是否一致,这就要用到余弦定理计算向量的夹角了。

余弦定理对我们每个人都不陌生,它描述了三角形中任何一个夹角和三个边的关系,换句话说,给定三角形的三条边,我们可以用余弦定理求出三角形各个角的角度。假定三角形的三条边为 a, b 和 c,对应的三个角为 A, B 和 C,那么角 A 的余弦

傅一平:数学中的“罗辑思维”

如果我们将三角形的两边 b 和 c 看成是两个向量,那么上述公式等价于

傅一平:数学中的“罗辑思维”

其中分母表示两个向量 b 和 c 的长度,分子表示两个向量的内积。举一个具体的例子,假如新闻 X 和新闻 Y 对应向量分别是

x1,x2,…,x64000 和

y1,y2,…,y64000,

那么它们夹角的余弦等于,

傅一平:数学中的“罗辑思维”

当两条新闻向量夹角的余弦等于一时,这两条新闻完全重复(用这个办法可以删除重复的网页);当夹角的余弦接近于一时,两条新闻相似,从而可以归成一类;夹角的余弦越小,两条新闻越不相关。

傅一平:数学中的“罗辑思维”

我们在中学学习余弦定理时,恐怕很难想象它可以用来对新闻进行分类。在这里,我们再一次看到数学工具的用途。有了新闻的特征向量,又有了计算相似性的余弦定理,就可以讨论新闻分类的算法了,其实很简单,只要设定一定的相似度阈值,然后两两进行比较,就可以快速的自动形成分类。

Part 7 结语

将数学的东西讲清楚让外行读懂是一件非常难的事情,正如吴军所说,当他第一次将所写文章送给非工程专业的人阅读时,还是非常费劲,笔者也不是内行,只是将印象深刻的6个例子再写出来,大家可以举一反三的总结、学习,里面的很多原理,对于从事IT专业的人,也具有指导意义,对于非IT人员,也可以成为茶余饭后的科普读物。

感谢吴军老师,将世界上看似深奥的东西,写出来人人都能读懂。文章很长,但值得你读完,我仅仅是个搬运工。

本文为专栏文章,来自:傅一平,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/19633.html 。

(1)
上一篇 2016-06-17 00:55
下一篇 2016-06-20 18:00

相关文章

关注我们
关注我们
分享本页
返回顶部