第142章 規則
熱烈掌聲響起來。
觀眾席上大部分人都在盯著大屏幕,等著看規則。
大屏幕亮了。
團隊現場編程。限時三小時。共一道大題,分三個階段遞進。
題目:設計一套中文輸入法引擎。
林東看到這行字的時候,手指在鍵盤上停了一下。
輸入法。
屏幕、電池、主板、外殼、觸控算法、天線、驅動一全都齊了,唯獨輸入法還用的是開源的方案,體驗一般,適配也麻煩。
他本來打算年後做一套,現在好了,決賽題目就是輸入法。
他嘴角動了一下。
做完直接拿走。
階段一(60分鐘):核心索引。
設計拚音到漢字的索引結構。給定詞庫(約10萬詞條),要求支持拚音輸入,返回匹配的候選詞列表。響應時間不超過20ms,內存占用不超過1MB。
階段二(60分鐘):智能聯想。
在階段一的基礎上,增加詞組聯想功能。輸入一個詞,係統自動預測下一個可能的詞。內存占用增加不超過0.5MB。
階段三(60分鐘):動態優化。
在階段二的基礎上,增加詞頻動態調整功能。用戶的使用習慣實時影響候選詞排序。內存占用增加不超過0.5MB,總內存不超過2MB。
提交內容:每階段完成後提交代碼,係統自動評測。三階段全通過者按總用時排名。
李教授頓了頓,掃了一圈全場:「現在,我宣布—一創新杯程序設計大賽決賽,正式開始。」
大屏幕上倒計時跳動:03:00:00。
體育館裡安靜下來,隻有鍵盤敲擊的聲音。
林東沒有急著動手。
他把三個階段的要求又看了一遍,然後靠在椅背上,閉上眼睛。
階段一,核心索引。
拚音到漢字的映射,常規做法是用Trie樹,時間複雜度0(n),內存可控。但Trie樹的每個節點都要存26個指針,10萬詞條下來,內存肯定超1MB。得換一種思路。
他想到了李虎重寫後的那個數據結構。
第二輪比賽,李虎那道題的原解法是0(n2),重寫後降到了0(nlogn)。
核心改進是把嵌套循環換成了哈希加二分查找,數據存儲從鏈表換成了數組。當時林東站在李虎後麵看了一眼,覺得這個思路不錯,順手記下來了。沒想到今天用得上。
他睜開眼睛,打開編輯器。
先用哈希表存拚音到詞條索引的映射,再用數組存詞條本身。
查詢的時候,哈希找到索引,二分查找定位,一次搞定。時間複雜度0(log
n),內存占用—他算了一下,大概0.6MB。
夠了。
他開始寫代碼。
手指落在鍵盤上,速度不快不慢。哈希函數、衝突處理、二分查找邊界—
每一個細節都在他腦子裡過了好幾遍。他不是在「寫」代碼,是在「翻譯」腦子裡的東西。
寫了大概三十分鐘,他停下來,檢查了一遍。哈希函數沒問題,二分查找邊界處理正確,內存分配沒有泄漏。
他看了一眼旁邊的李虎。李虎也在寫,手指飛快,屏幕上代碼一行一行地跳出來。他寫的是階段一,用的也是哈希加二分查找一和林東的思路一模一樣。
林東嘴角動了一下。
他沒告訴李虎怎麼做,李虎也沒問他。兩個人想到一塊去了。是這道題的最優解就在那兒,誰水平夠,誰就能看到。
他收回目光,繼續寫。
又寫了十分鐘,代碼完成了。
他按下「編譯」——通過。
再按下「運行」——測試用例全部通過。
響應時間——他看了一眼,12ms。內存占用——0.58MB。
他深吸一口氣,按下「提交」。
大屏幕上,四大天王隊的圖標亮了—一提交。
觀眾席上一陣騷動。
「這麼快?四十分鐘就提交了?」
「張揚隊那邊還沒動靜呢。」
「是不是太趕了?」
李虎也轉過頭來,壓低聲音:「老四,你交了?」
「嗯。」
「這麼快?」
林東沒回答,盯著大屏幕。
幾秒鐘後,圖標變紅。
未通過。
w t . p o o問訪請容內說小多更
。論議片一起響上席眾觀
」。了回退被「
」。了趕太,吧說我「
」?吧車翻會不王天大四「
」?事回麼怎「:了去進掐快都甲指,膊胳的露陳著抓,上席眾觀在坐琳周
」。束結沒還「:穩很音聲,幕屏大著盯露陳
。情表麼什沒上臉,」過通未「個那上幕屏著看東林
。件條界邊—眼一了看,饋反測評開打他
。理處沒界邊詞分的」nail「和」gnail「音拚
。聲一己自了罵暗他
。了漏實確
。了改始開他
。理處開分」nail「和」gnail「把,斷判個一了加裡數函希哈在
。完改,鐘分五
。過通部全例用試測,行運新重,譯編新重
。」交提「下按次再
。綠變標圖,上幕屏大
。過通
。鐘分五十四:時用
。氣口一出長,上背椅在靠東林
」。跳一我嚇「:聲一了笑嘿嘿邊旁在虎李
。說東林」。續繼「
。成完沒還一段階的人他其但,了成完一段階
。交提沒還一段階,邊那隊揚張
。二段階做著接好,一段階完寫虎李和東林等在,手動沒直一藏許和龍陳
。問東林」?來誰,二段階「
」。來我「:了口開藏許
他了看東林