1

文字列のソース(たとえば、テキストファイル)があり、多くの文字列が複数回繰り返されます。出現回数の多い順に上位X個の最も一般的な文字列を取得する必要があります。

最初に頭に浮かんだアイデアは、並べ替え可能なバッグ(org.apache.commons.collections.bag.TreeBagなど)を作成し、必要な順序でエントリを並べ替えるコンパレータを提供することでした。ただし、比較する必要のあるオブジェクトのタイプがわかりません。これは、TreeBagによって内部的に生成された、オブジェクト(String)と発生数を組み合わせたある種の内部マップである必要があります。これは可能ですか?

または、たとえばJavaでHashMapを値で並べ替えるなどの説明に従って、ハッシュマップを使用して値で並べ替える方がよいでしょうか。

4

2 に答える 2

0

グアバの ではTreeMultiset、 を使用するだけMultisets.copyHighestCountFirstです。

于 2012-03-22T09:23:03.643 に答える
0

文字列をマップに入れてみませんか。文字列をテキストに出現する回数にマップします。ステップ 2 では、マップ内のアイテムをトラバースし、サイズ X の最小ヒープにそれらを追加し続けます。
nlogx 時間がかかります。

それ以外の場合は、ステップ 1 の後で項目を出現回数でソートし、最初の x 個の項目を取得します。ここでツリー マップが役に立ちます :) (javadocs へのリンクを追加しますが、タブレットを使用しています) nlogn 時間がかかります。

于 2012-03-22T04:53:53.283 に答える