查詢詞提公升是現代搜尋引擎中廣泛使用的一種技術,當使用者輸入查詢詞字首時,會給出一系列相關的查詢詞推薦,例如在搜尋框內輸入"中國",會提公升"中國好聲音","中國銀行", "中國聯通"等,嘗試設計乙個查詢詞提示系統,回答以下問題:
1.給定乙個查詢詞集合,用何種資料結構和演算法來構建最基本的提示系統?要求輸入中文和拼音都能正常工作
2.使用者輸入的字首下可能有很多可提示的查詢詞,如何對這些查詢詞進行排序,將使用者選擇概率更高的詞放在前面?
1、答:可以使用trie樹來構建最基本的提示系統,trie樹即字典樹,又稱單詞查詢樹或鍵樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計和排序大量的字串(但不僅限於字串),所以經常被搜尋引擎系統用於文字詞頻統計。優點是:最大限度地減少無謂的字串比較,查詢效率比雜湊表高。
當使用者輸入字首的時候,搜尋框會展示以i為字首的trie樹上的所有單詞。對於中文,建立索引和查詢前先轉換成相應的拼音,查詢完成後還得把拼音轉換成漢字顯示,且需要考慮數字和特殊字元。
2、答:可以使用topk演算法,用於統計熱詞問題,解決熱詞問題可以使用hashmap+堆排序。hashmap統計:先對這批海量資料預處理。具體方法是:維護乙個key為query字串,value為該query出現次數的hashtable,即hash_map(query,value),每次讀取乙個query,如果該字串不在table中,那麼假如該字串,並且將value值設為1;如果該字串在table中,那麼將該字串計數家一即可,最終用o(n)的時間複雜度內用hash表完成了統計。
堆排序:借助堆這個資料結構,找出topk,即借助堆結構,我們可以在log量級的時間內查詢和調整/移動。因此,維護乙個k大小的小根堆,然後遍歷query,分別和根元素進行對比。
DIY乙個簡易查詢系統
前段時間應需求計畫做乙個簡潔的 中藥毒 查詢 小工具 們提供了不少資料.最簡潔的還屬這個名單 我們預期一下我們希望做出乙個什麼東東,它應該 可以展示資料裡的藥物及其屬性關係.例如 柴胡 對應 小柴胡片 小柴胡顆粒 得生丸 安坤贊育丸。柴胡皂苷 能導致腎上腺肥大 胸腺萎縮,使人體免疫功能降低。有腎毒性...
如何設計乙個秒殺系統
秒殺場景一般會在電商 舉行一些活動或者節假日在12306 上搶票時遇到。對於電商 中一些稀缺或者 商品,電商 一般會在約定時間點對其進行限量銷售,因為這些商品的特殊性,會吸引大量使用者前來搶購,並且會在約定的時間點同時在秒殺頁面進行搶購。限流 鑑於只有少部分使用者能夠秒殺成功,所以要限制大部分流量,...
如何設計乙個秒殺系統
秒殺場景一般會在電商 舉行一些活動或者節假日在12306 上搶票時遇到。對於電商 中一些稀缺或者 商品,電商 一般會在約定時間點對其進行限量銷售,因為這些商品的特殊性,會吸引大量使用者前來搶購,並且會在約定的時間點同時在秒殺頁面進行搶購。限流 鑑於只有少部分使用者能夠秒殺成功,所以要限制大部分流量,...