多音字 搜索词纠错: 匹配简拼(汉字数≥5时才有效)  单字的拼音来自:这里(最全的多音字)...     

当搜索词中有错别字时,搜索引擎会尝试纠错

通过相似拼音纠错

搜索引擎把这些字还原成拼音,用一个拼音相同的已知的搜索词代替。

这是一种众所周知的纠错策略,但是,当输错的字是多音字,特别是有多个这样的错误输入时,所有的搜索引擎都尽量绕开这个问题,或者仅使用最常用的那些音去纠错。 因为要考虑所有可能的拼音组合,在极端情况下会导致指数爆炸! 例如某互联网大厂的实现(枚举多音字全排列)

基于自动机的算法可以完美解决这个指数爆炸问题

  • 这是自动机应用的又一个绝佳范例,作为演示,这个页面只收录了 800万搜索词+词频,数据也不太干净
  • 该算法全部在内存中运行,使用了 293M 内存,这个数据量,如果用传统方法暴力实现,并且达到这个性能,需要 几十G 的内存
  • 暴力方法是 Query 越长越可怕,该算法则是 Query 越长,优势越大
  • 纠错耗时仅供参考(单核虚拟云主机: Xeon E5-2430 2.20GHz + RAM:1G),如果你看到搜索耗时过长,很可能是 mmap 数据被 swap 到了硬盘上,再搜索一次会得到客观的搜索耗时

这个算法也可以用来解决用户输入预测(智能提示)功能

用户只输入Query开头部分,就自动提示出整个Query,例如用户输入举头望,就提示出举头望明月。就像现在各种搜索引擎做的那样。

基于编辑距离的纠错

在已知的搜索词中寻找编辑距离与用户 Query 最小的词,使用我的算法也可以高效解决(还没做演示页面)

vc 鲜为人知的 __if_exists

阅读更多关于《vc 鲜为人知的 __if_exists》

msdn 中有这样一个示例:

 

但是不能检测某个变量是否有某个成员,象下面这样的代码是不能编译的:

 

 

或许是因为本质上,可以通过其它方法实现这个功能,也就是依据目前的这种机制,也可以达到目的,但是繁琐一些,需要加一个中间层,例如:

检查序列化声明的顺序和成员定义的顺序

阅读更多关于《检查序列化声明的顺序和成员定义的顺序》

DataIO_is_realdump用来推断一个对象是否可以直接通过dump内存来完成序列化,如果可以,在load/save时会有极大的性能提高。 继续阅读

febird.dataio vs boost.serialization 运行性能对比

阅读更多关于《febird.dataio vs boost.serialization 运行性能对比》

代码表示的是数据格式,DATA_IO_LOAD_SAVE 在 <febird/io/DataIO.h> 中定义

对于 boost.serializationDATA_IO_LOAD_SAVE 的定义相当于: 继续阅读

febird.DataIO 和 boost.serialization 编译性能对比

阅读更多关于《febird.DataIO 和 boost.serialization 编译性能对比》

C++ 程序的性能,重要的不光是运行性能,还有编译性能。运行性能就不多说了,编译性能往往被大家忽略,但是,想一下,如果编译一次要花一小时,那每天能编译几次?

和 boost.serialization 相比,febird.DataIO 的运行性能和编译性能都压倒性地胜出: 继续阅读

febird.dataio 优化技术

阅读更多关于《febird.dataio 优化技术》

优化技术主要有两点:

1.         优化的inline

a)         频繁调用的函数都使用inline,但是值得注意的是,在inline的时候,只inline最频繁的分支,很少走到的分支使用非inline函数,例如:

继续阅读

死得离奇

阅读更多关于《死得离奇》

今天才看到那个潘星谊被鱼缸kill掉了,太离奇了!最让我想不通的是,她那么有钱,怎么买了个劣质鱼缸哪?

还是奸商以次充好,用高档鱼缸的价格,却给了个劣质鱼缸?

可以预见的事情是,鱼缸产业在一段时间内会遇到冲击,就像三路奶粉,短期内没人敢买鱼缸了。

最近两年,离奇的,荒谬的事情是一件接一件,是新闻更加开放了呢?还是离奇事件更多了?

自然想起,我小时候拿着一瓶罐头跑,结果因为刚下完雨,地面湿滑,摔了一跤,结果瓶子摔碎了,我的手掌刚好撑到碎玻璃上,结果弄出一个4厘米长,深度见骨的口子。

 

我用的搜狗拼音,刚才打“更加开放”时,它给我自动组的“更加开房”,看来这个搜狗的确比较蠢,“开放”这个词,是个动词,“开房”呢,应该算是个短语异化成的动词,且不说需要更多组合的二元文法,如果使用概率文法,“开房”这样的异化词,是应该很少被“更加”这样的副词修饰的。搜狗的智商,还有待提高!

qq 的程序员真蠢

阅读更多关于《qq 的程序员真蠢》

今天新装了vista,顺便装了最新的qq 2009 beta,这次它提示个人信息的保存位置,还好,有点顺应趋势。

为了安全,我安装软件用的是 Administrator 账户,然后再开一个低权限账户作为日常使用。

可是让我大跌眼镜的是:当我在低权限账户中的时候,开始菜单中竟然没有qq!于是到它的安装目录下,往桌面创建一个快捷方式,运行起来以后,它竟然没有把个人信息保存在“文档”中,安装时的那个选项只针对Administrator 账户,也就是安装qq的那个账户!真想不通,这么蠢的公司,竟然能有这么多用户。

中医是迷信和反科学的

阅读更多关于《中医是迷信和反科学的》

中医是不是科学,中医有没有疗效,中医应不应当废除?这样一个不成问题的问题,中国已经争论了一百年。一个具体的、常识性的问题,又不是什么尖端理论,一个民族一百多年找不到答案是很奇怪的。任何参与过这场讨论的人都有一种印象:这根本不是什么理论的探讨、不是正确与错误的争论,而是一场义气之争。坚决要求取缔中医者,如胡适、鲁迅、李敖以及我das之流,醉翁之意不在酒,意在宣扬一种正确的认识问题的方法,善良的人们过分相信经验而丧失了批判的能力,中国大部分问题的症结概由于此。而陈果夫之辈拼命确保中医者,除了那些靠中医混饭吃的江湖骗子,大部分人也是在坚持一种信念:科学是不完备的,在科学的认知范围之外,还有广大的未知领域。中国传统国粹博大精深,早就抓住了这些未知领域的根本,若干年之后现代科学必将向中国传统国粹回归。就这样中医问题就和思想启蒙搅在一起,本来并不复杂的问题复杂化了。

国人传统思维定势是如此根深蒂固,这个问题不解决,再高喊什么民主、自由、科学、理性、正义、公平、法制、和谐等等,统统都是扯淡。Das再冒天下之大不韪,也来谈谈中医,也来谈谈科学,也算告慰胡适等前辈。

 

一、中医是迷信和反科学,中医理论与科学理论尖锐对立

 

科学的定义过于学理化,而且容易引发争议,das描述一下科学的最基本特征就足够了。以下给出科学的一些重要的必要条件。满足这些条件的理论不一定就是科学,但是科学的理论必须满足下列条件:

 

1、科学必须具有潜在的可证伪性。意思就是说,也许科学理论是不可证实的,但是必须是可以证伪的。比如相对论,就是一个很好的科学理论。它有大量的观察和试验的结果支持。但是你、或者其他任何人,只要通过理论证明以太存在,或者通过实验证明光速不变性是错误的,就可以推翻全部的相对论,全世界的科学家立即就会拥护你而反对爱因斯坦,而你,不再需要其他任何争论和解释。迷信是不可证实的,这一点与科学很相像,不同的是迷信是不可证伪的。你说你昨天夜里见鬼了,这是不可重复的实验,我无法证伪。牛顿说两个有质量的物体之间一定有引力,只要满足实验条件,任何人在任何地方都可以重复试验。如果重复实验中没有发现引力现象,就可以证明万有引力定律错了。

 

2、寻找反例。科学承认自己无知,承认科学理论中有许多漏洞,承认在任何科学领域都有必要进一步研究和发展。最伟大的科学英雄不仅是那些发明科学理论的人,还有那些发现科学漏洞的人。二十世纪初,一些科学家发现经典物理学必将导致黑体辐射总能量无穷大的荒谬结论,从而引发了量子力学革命。那些发现荒谬的人和为量子力学奠基的人历史地位同样伟大。迷信与科学的一个重要区别是:迷信拒绝寻找反例。迷信一开始就提出决定性的结论,并认为自己是全知全能,完全正确的,对一切相反的事例视而不见。巫婆神汉说跳大神能治病,并能列举出一大串跳完大神以后病人痊愈的事列,但是跳完大神以后病人死了的事列更多,巫婆神汉不会也不可能认真寻找原因,改进和提高自己跳大神的技术。

 

3、还原法。科学经常被人攻击为不完善的,最重要的原因就是还原法。还原法与中国传统思维方式尖锐对立。还原论的突出表现是:尽量简化条件、分割对象,做可控制的实验,不断用下一层次的规律揭示上一层次的规律,解释上一层次的现象。并认为下一层次更具有根本性。很多妇女生过小孩以后发高烧,中医认为是“受风了”,却不能解释为什么空气的流动会使生小孩的妇女发烧。西医认为是细菌感染,可以从生理学、病理学、生物学这些下一个层次的科学理论解释的清楚明白。单单这样一项解释也许并不比巫婆神汉的理论更具有说服力,一个重要的区别是:任何一个小小的科学分支都是与全部的、庞大的科学理论体系相联系的,这其中的联系,是完全的、充分的相协调的,没有任何内在的、逻辑的矛盾。谁在科学体系中发现哪怕一个最小的矛盾,都会成为伟大的英雄而被载入史册。你不能发现发烧的病理学解释有任何逻辑的瑕疵,还可以对病理学本身提出疑问,他又可以有生物化学这下一个层次的科学理论解释,仍然没有任何逻辑的瑕疵,这样一步一步推导下去,最后所有的问题都会归结为牛顿力学、量子力学、相对论以及能量守恒定律。你对这些最基本的科学理论仍然有疑问,我暂时找不到更下一层的理论,但是这些理论有大量的观察、试验在后面支持,最为重要的,迄今人类还没有发现任何一件与之相矛盾的事实,因而,你可以怀疑,却没有任何抛弃这些理论的理由。

 

好了,上面列举了科学的一些重要性质。需要指出的是:这里所说的科学是现代意义的,狭义的科学。与李约瑟《中国古代科技史》所称得“科学”是完全不同的两个概念。那是广义的,包含了,甚至主要是指无理论支撑的、盲目而偶然的技术进步。国粹主义者最强大的武器就是偷换这两个概念。

 

现在我们可以来谈中医了。中医可证伪吗?不能。再好的手术刀,再大的显微镜也找不到奇经八脉,他说这味中药入手少阳胃经,你找不到这个经,怎么证伪?只好听他胡扯。你找他理论的依据,他说这是古人说的。古人怎么知道的?他就用一种威严而睥睨的眼光看你,让你心虚,殊不知,心虚的正是他自己。中国传统理论认为历史是倒退的,古人是最聪明的、最有学问的,几乎到了半人半神的地步。一点小事都要到古人那里找依据,引经据典可以把你搞得三魂出窍,找不到北。古人没有说过,就可以认定你是胡说八道,不需要其他依据作补充。这种状况现在已经有所转变,但是骨子里仍然遗毒甚深,很多人说理的依据不是理性和逻辑,而是引经据典,把古人、权威、多数人的看法作为论据。

 

脏腑经脉是不足为信的,既然这玩意儿X光、磁共振都发现不了,几千年前那些自称医生的老先生们连眼镜都没有,怎么就发现了呢?如果说是靠长期的经验总结出来的,那更是胡扯,现在人的经验比古人更丰富,为什么不能再总结一遍?总结这些玩意儿采信了什么经验?依靠什么样的逻辑?依据是否充分?逻辑是否严密?所有的一切统统说不清楚,只有几本来历不明的古书,记载了几句据说是神仙说的话,这些神仙又没有任何依据证明自己的话正确,一大帮中国人竟然拿来作为治病救人的依据,这不仅是迷信,简直就是笑话。

 

言归正传,中医会主动寻找反例吗?不会。中医挂在嘴边的一句话是:医者治病,不治命。治死了算你倒霉,是你的命运,由老天爷负责。什么原因死的,有没有可能避免,怎样避免?这样科学式的追问中医从来没有。当然,就是问了也没有用,治好它不知道为什么好,治死当然不知道为什么死。中医与科学的方式正好相反,与巫婆神汉倒是毫无二致:治好了就是法力无边的证据,治死了视而不见。其实大部分疾病不治也会好的,大部分人一辈子都要得几十、几百次病,不一定每一次都要死。假如你一辈子得120次病,不治的话,最后一次才会死,现在你改变一下方式,每一次都找中医治疗,一些江湖骗子每次给你下一点毒,结果第一百次就把你毒死了。他照样可以到处夸耀什么:我老人家法力无边,治愈率为99%,不信你看那个倒霉鬼,我给他治愈了99次,最后一次他才死!

 

中国人吃了几千年的中药,平均寿命一直在三四十岁。中医科学了几千年,怎么就不能延长人的寿命?如果中国人现在仍然吃中药,加上环境污染、激素泛滥、生活紧张、假药流行,平均寿命一定不会超过三十岁。现实是:抗生素来了,延长寿命二十年,免疫接种加上其他一大套西医技术、药品,又延长了将近二十年,扣除环境污染因素,实实在在的中国人的平均寿命快到七十岁了。(感谢腾讯网)

 

引自:http://knewman.blog.163.com/blog/static/29247292007410113652307/

侏罗纪公园

阅读更多关于《侏罗纪公园》

侏罗纪公园,很久以前就下载了,一直没看,前天看了1,现在正看2,总体上感觉,情节设计有严重问题。主要是对我的是非观的颠覆。

既然一切都是“设计”出来的,在1里面,明明是个人的错误(那个白痴胖子偷胚胎),却被扩展成整个系统的错误——这部电影主要是宣扬这个主题。就像世贸大厦被恐怖分子袭击了,然后我们不怪罪恐怖分子,却怪罪楼盖得不结实,如果也拍一部电影宣扬这个主题,我们大家怕是都要笑导演弱智,奇怪的是好像没有人笑斯皮尔伯格在这部片里表现的弱智。

在2里面,四个破坏者的车掉下海边的悬崖那段,并不算什么重要的场景,却花了那么大篇幅去描写。并且,被吃掉的那个人还是最无辜的——那两个男女变态动物保护主义者,给小暴龙接骨的那两个,最他妈该死,却让他们活着!

—————————————

2终于看完了,破坏者没死,这是意料之中的。整体感觉,比1还要差劲。不是在视听上,是在情节设计上。如果它要表达的是团队协作的差劲成都,没组织没纪律的程度,那整部影片还不算太差劲。

3个破坏者被救以后,死掉的第一个人,是被他的同伙害死的,在那种危险情景下,他去树林里撒尿,同伙却在听耳塞。在这种情境下,我觉得应该是他有惊无险找到了回来的路,而那个带着耳塞听音乐的应该死掉;可惜导演跟我想法不一致。

还有,那个女的,是个动物学家,知道如何判断暴龙的行为,却不知道衣服上的小暴龙血会招引老暴龙,就象一个会解微分方程的大学教授,却不会计算43+57=?不知导演是拿观众当白痴,还是拿自己当上帝。

自始至终,我看到的只是那几个破坏者的破坏作用发挥得淋漓尽致,如果还有哪些观众觉得这几个破坏者的行为很伟大,并且不觉得情节别扭的话,那的确是导演/编剧的成功了!

 

asio/ACE/apr/libevent

阅读更多关于《asio/ACE/apr/libevent》

整体感觉:ACE太庞大,asio 太赶时髦。

ACE太过庞大,使得你即便是只使用它的一小部分,也不得不引用它的全部。而且框架一大堆,模式一个加一个,很多编程习惯也要改变。学习曲线太陡,也难以将它作为一个模块集成自己的应用。

asio呢,有个牛大大说它是现时代的ACE,我觉得比较中肯。用bind做回调也并不比虚函数好,看上去灵活了,代价却更高了。我说的不光是运行时的内存和时间代价,更重要的编译时间难以忍受。

apr大约只是一个平台无关的api封装,相对来说比较轻量级。

libevent就更轻量级了,轻量级到无法把它当成一个平台无关的socket,还要写很多平台相关的代码。

相比而下,我觉得apr还好点,其实我需要的只是一个机制,而不是一个完整的策略,这是unix的哲学。如果仅就异步通讯来说,我觉得linux.epoll是最好的,简单、直接、有效,如果在每个平台上都有epoll可用,所有其它封装在我看来都是多余的了。

proactor真的就比reactor高效吗?它更多的是一种策略,据说Windows的操作系统级IOCP是用线程池实现的,它能高效到哪里去?