第一百四十二章 规则
 拼音“liang”和“lian”的分词边界没处理。

    他暗骂了自己一声。

    确实漏了。

    他开始改了。

    在哈希函数里加了一个判断,把“liang”和“lian”分开处理。

    五分钟,改完。

    重新编译,重新运行,测试用例全部通过。

    再次按下“提交”。

    大屏幕上,图标变绿。

    通过。

    用时:四十五分钟。

    林东靠在椅背上,长出一口气。

    李虎在旁边嘿嘿笑了一声:“吓我一跳。”

    “继续。”林东说。

    阶段一完成了,但其他人的阶段一还没完成。

    张扬队那边,阶段一还没提交。

    陈龙和许藏一直没动手,在等林东和李虎写完阶段一,好接着做阶段二。

    “阶段二,谁来?”林东问。

    许藏开口了:“我来。”

    林东看了他一眼。

    “需要什么?”林东问。

    “阶段一的代码。”许藏说,“还有词库。”

    林东把阶段一的代码发给他。

    许藏打开,从头到尾看了一遍,没说话。

    然后打开编辑器,开始写。

    林东没打扰他,靠在椅背上看着。

    许藏的思路和他不一样。阶段二要求词组联想—一输入一个词,系统自动预测下一个可能的词。

    常规做法是统计词与词之间的共现频率,词库10万词条,两两组合就是100亿对,根本存不下。

    许藏用的不是常规做法。

    他把每个词映射成一个固定维度的矢量,然后计算矢量之间的相似度。相似度高的词,就是可能的下一个词。

    这个思路,林东想过,但没往深了想。

    因为矢量维度太高,计算量太大。但许藏用了降维一用哈希把高维矢量压缩成低维,计算量从0(n2)降到了0(n)。

    许藏写得很快,代码量很少,但逻辑很绕。

    林东看了一遍,看懂了。陈龙也凑过来看了一遍,没说话,但推了推眼镜。

    五十分钟后,许藏停下手指。

    “写完了。”他说。

    “检查了吗?”陈龙问。

    “没有。”许藏说。

    林东愣了一下:“没检查?”

    许藏看了他一眼:“你帮我检查。”

    林东没说话,把代码拿过来,一行一行地看。

    哈希函数,没问题。

    矢量降维,没问题。

    相似度计算,边界条件没处理。

    他改了一行代码,加了一个判断。

    “好了。”他说。

    许藏点了点头,按下“提交”。

    大屏幕上,四大天王队的图标亮了—一提交。

    观众席上又是一阵骚动。

    “阶段二也交了?这么快?”

    “张扬队阶段二开始还没有多久。”

    几秒钟后,图标变绿。

    通过。

    用时:五十分钟。

    李虎兴奋得差点从椅子上跳起来,被陈龙按住了。

    “别激动。”陈龙说,“还有阶段三。”

    林东看了一眼大屏幕上的时间。

    倒计时还剩一小时二十五分钟。张扬队阶段一刚通过,用时六十五分钟。

    四大天王总用时一个小时三十五分钟,比张扬队快了将近二十分钟。

    但阶段三才是最难的部分。

    词频动态调整。

    用户的使用习惯实时影响候选词排序。常规做法是用LRU或LFU算法,维护一个词频表,每次输入后更新权重。。。再加LRU的双向链表,肯定超。

    林东有另一个办法。

    他第二轮结束后研究过这个算法—一—近似计数算法。

    固定大小的二维数组,不存具体词频,只存近似值。。

    当时不是为决赛准备的,只是觉得“以后可能用得上”,顺手写了一个de

    。没想到今天真用上了。

    他打开编辑器,开始写。

    算法不复杂。

    一个二维数组,d行,w列。每个输入进来,哈希到某一行某一列,计数加一。查询的时候,取该位置的最小值作为近似计数。误差可控,内存固定。

    他写得很快。每一个变量,每一个函数,每一行代码,都在他脑子里过了无数遍。

    李虎凑过来看了一眼,看了半天,问了一句:“你这个算法,跟第

本章未完,请点击下一页继续阅读>>