亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在大詞序列中找到前K個頻繁詞的最有效方法

在大詞序列中找到前K個頻繁詞的最有效方法

輸入:正整數K和大文本。實際上,文本可以被視為單詞序列。因此,我們不必擔心如何將其分解為單詞序列。輸出:文本中最常見的K字。我的想法是這樣的。使用哈希表來記錄所有單詞的頻率,同時遍歷整個單詞序列。在此階段,鍵是“字”,值是“字頻”。這需要O(n)時間。對(字,字 - 頻率)對進行排序; 關鍵是“字頻”。這需要使用正常排序算法的O(n * lg(n))時間。排序后,我們只取第一個K字。這需要O(K)時間??偠灾?,總時間是O(n + n lg(n)+ K),因為K肯定小于N,所以它實際上是O(n lg(n))。我們可以改善這一點。實際上,我們只想要前K個詞。換句話說,頻率對我們來說并不重要。因此,我們可以使用“部分堆排序”。對于步驟2)和3),我們不僅僅進行排序。相反,我們改變它2')構建一堆(word,word-frequency)對,以“word-frequency”為關鍵。構建堆需要花費O(n)時間;3')從堆中提取前K個單詞。每次提取為O(lg(n))。所以,總時間是O(k * lg(n))??偠灾?,該解決方案花費時間O(n + k * lg(n))。這只是我的想法。我還沒有找到改進步驟1)的方法。我希望一些信息檢索專家可以對這個問題有所了解。
查看完整描述

3 回答

?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

你不會比你描述的解決方案獲得更好的運行時間。你必須至少做O(n)工作來評估所有的單詞,然后O(k)額外的工作來找到前k個術語。

如果您的問題集非常大,則可以使用分布式解決方案,例如map / reduce。n個映射工作者在每個文本的1 / n處計算頻率,并且對于每個單詞,將其發送給基于單詞的散列計算的m個reducer工作者中的一個。然后減速器將計數相加。對減速器輸出的合并排序將為您提供最流行的單詞,以便受歡迎。


查看完整回答
反對 回復 2019-09-19
  • 3 回答
  • 0 關注
  • 656 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號