給予你無限量的單詞來源,單詞的長度和單詞的長度可能很大,而且不知道它有多大。你會如何發現新單詞是否被重複使用,你將使用什麼樣的數據結構來存儲。這是面試時問我的問題。請幫助我驗證我的答案。在無限的詞彙流中找到重複的單詞
回答
通常使用散列表來跟蹤每個單詞的計數。由於您只需回答單詞是否重複,因此可以將單詞計數減少爲位掩碼,以便僅爲每個散列索引存儲單個位。
如果問題與大數據有關,比如如何爲Google編寫搜索引擎,則您的答案可能需要與MapReduce或類似的分佈式技術相關(這在某種程度上與上述相同的哈希表技術有所不同)
如果我沒有字符串長度的先驗知識,我該如何選擇我的散列函數......所以我認爲哈希不能用於...... –
散列函數一直用於變量字符串和未知長度。問題是你是否/如何迎合碰撞 - 如果你只是想要合理的保證,通常是雙重哈希函數。如果您需要絕對保證,您可能需要開始查看MapReduce技術,因爲它們保留所有信息,而簡單哈希則不會。 – Soren
與大多數順序數據一樣,在這裏,trie將是一個不錯的選擇。使用一個特里可以非常經濟地存儲新單詞,但仍然一定要找到新單詞。嘗試實際上可以被看作是單詞的多重哈希形式。如果這仍然會導致問題,因爲單詞的大小很大,您可以通過從單詞中生成一個directed acyclic word graph(DAWG)以便減少常見後綴和前綴,從而提高效率。
如果您只需要有效地檢測每個單詞是否曾經見過,那麼布隆過濾器就是一個不錯的選擇。這有點像一個集合和一個哈希表合併成一個,因此可能會導致誤報 - 因此,他們有時可以使用其他技術來降低風險。布盧姆過濾器的優點是它們非常節省空間(重要的是如果你真的不知道列表會有多大)。他們也很快。不利的一面是,你不能再把話說出來,你只能說出你是否看過他們。
這裏有個不錯的描述:http://en.wikipedia.org/wiki/Bloom_filter。
- 1. 找到流中的單詞?
- 2. 如何找到單詞中的重複單詞?
- 3. 如何查找單詞在tweepy流中重複的次數?
- 4. 如何在給定單詞的單詞袋詞彙中獲得單詞的id?
- 5. KeyError:單詞'詞彙'不在詞彙表中'word2vec
- 6. Gensim:KeyError:「單詞不在詞彙表中」
- 7. 單詞詞彙系列
- 8. 在C++中找到重複的單詞數字
- 9. 在PHP中查找重複的單詞而不指定單詞本身
- 10. NLTK詞彙中缺少單詞 - Python
- 11. 查找單詞遊戲中的單詞
- 12. 如何找到文件中的重複單詞與向量C++
- 13. 找到代碼中重複單詞的正則表達式
- 14. Python:如何在單詞表中找到混雜的單詞
- 15. 如何在Python中找到單詞旁邊的單詞
- 16. 匹配找不到重疊的單詞?
- 17. 刪除單詞文檔中重複的相鄰單詞
- 18. 用grep/egrep查找重複單詞
- 19. 尋找最流行的詞彙列表中的
- 20. 在MongoDB中查找搜索到的單詞的近義詞
- 21. 將單詞文件中的文本複製到新單詞中
- 22. 在詞彙表中刪除一次出現的單詞TF-IDF
- 23. 在字符串中查找重複的單詞python
- 24. 計數流中的單詞
- 25. 查找字符串中的單詞詞
- 26. 查找wordnet中單詞的同義詞
- 27. 使用Trie查找單詞列表中的複合詞
- 28. 計算文件中的重複單詞
- 29. 刪除地址中的重複單詞
- 30. 顯示在Haskell重複的單詞
你的答案是? – PengOne