19
ビッグワードシーケンスで上位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-frequency」をキーとして(word、word-frequency)ペアのヒープを構築します。ヒープを構築するにはO(n)時間がかかります。 3 ')ヒープから上位K語を抽出します。各抽出はO(lg(n))です。したがって、合計時間はO(k * lg(n))です。 要約すると、このソリューションのコストは時間O(n + k * lg(n))です。 これは私の考えです。ステップ1)を改善する方法がわかりません。 一部の情報検索の専門家がこの質問にもっと光を当てることができることを願っています。