何千もの数字を含むファイルで上位n個の数字を見つけるためにアルゴを見つけようとしていました。 その前に、配列の上位n個の数値を確認したが、具体的な解決策が得られなかった。 ソートは明白なオプションですが、他の方法がありますか?ファイルに同じロジックを適用できるかもしれませんファイル内の上位n個の数字を見つける
1
A
答えて
0
あなたのファイルは次のように見えます。
123 448 28239
1299 23729 71829
18283 75723 817
93993 1791 9
標準のUNIXツールを使用して、私はこのようにします。
$ tr " " "\n" < in.txt | sort -n -r | head -5
93993
75723
71829
28239
23729
説明:
tr
が改行にすべての空間を変換\n
sort -n -r
種類今数値的に、1つの番号毎を含む行、および折返しhead -5
はのトップ5を取りますこれらのソートされた行
もちろん、これはあなたのアルゴリズムの質問には答えません。
編集:Comparison of Internal Sorting Algorithms 2008からは、さまざまなツールで使用されているアルゴリズムの詳細が示されています。
0
それはtopN
内のすべてのn
番号より小さいだ場合は、長さn
とし、ファイルのチェック中のすべての数のために(topN[n]
言う)の配列を維持することができます。
そうでない場合は、これをtopTen
の最小値に置き換えてください。
このアルゴリズムの複雑さがO(n*k)
であるため、n
があまり大きくない場合、これは良い解決策です。ここで、K
はファイル内の数字の数です。
それがソートされたままになりますようにあなたがtopN
に新しい番号を追加する必要がありますたびに(次の番号を追加するとき、それが役立ちます。)
1.は、次の番号
を取得しているため、実際の複雑さがO(n*(k+1))
です2.あなたtopN
配列のバイナリ検索して、それを検索し、その 場所(nextNumber
その後、小さい配列内の最大項目)
nextNumber
をその位置に挿入し、 topN
の次の項目をすべて右に移動します。
topN
の最後の項目はアレイから削除されます。f
は、ファイル内の数字の数であり、n
はあなたが抽出する必要がある番号であれば、あなたはO(n + f lg n)
でそれを行うことができます
3
(実際n <= f
として、O(f lg n)
である)を次のように
- ビルドファイル内の最初の
n
番号の(バイナリ)min-heap。 (O(n)
) - ファイル内の残りの数値については、ヒープ内の先頭の要素と比較してください。新しい番号が大きい場合は、一番上の要素をオフにして新しい要素を挿入します。 (
O(f)
回、O(lg n)
操作)。 - 完了すると、ヒープには
n
というファイル内で最大の数字が含まれます。
関連する問題
- 1. ルートに近い上位n個の場所を見つける
- 2. KNNが上位N個の隣人を見つける
- 3. リスト内のn個の最近傍点を見つける
- 4. 数字のn番目の数字を見つける
- 5. Java:ストリームソースの上位n個の要素
- 6. Javaのカスタムリストから上位N個の優先度の高い値を見つける方法は?
- 7. 文字列内の文字の位置を見つける
- 8. アルゴリズム:n個の配列(キュー)からk個の数字の最小合計を見つける
- 9. 使用のstd :: STDに上位N個のアイテムを見つけるためにソート::ベクトル
- 10. n個の数字のペア間の最大距離(数字スケール)を見つける
- 11. ArrayList内の数字を見つける
- 12. クラス属性Python scikitで上位n個の相関フィーチャ(Pearson cofficientに基づいて)を見つけるlearn
- 13. 2つのエンドポイント間にn個の対数間隔を見つける
- 14. N個のリストの中の共通のオブジェクトを見つける
- 15. 任意のツリー内でn個の最大ノードを見つける
- 16. ファイル内の複数の文字列を見つける - Perl
- 17. 配列のn個の最小値を見つける
- 18. Python、数字のn番目の根を見つける
- 19. 分割する高さの数字を見つけるN
- 20. リスト内の文字列の位置を見つけるC#
- 21. 複数行のUIButtonのテキスト内の文字のランタイム位置を見つける
- 22. 配列内の特定の数字の位置を見つける方法は?
- 23. 乱数セット内の数字のシーケンスを見つけるコードを見つけるにはどうすればよいですか? 10個の数字のセットで
- 24. O(n)時間内に配列内に10個の最大整数を見つける
- 25. 0から10の位の数字の逆を見つける
- 26. レジスタの上位と下位のマスク値を見つける
- 27. CSVファイル内にある3つの数字の平均を見つける
- 28. makefile:変数内の単語の位置を見つける
- 29. 最初のN個の自然数の配列の1,2,3個の欠損番号を見つける
- 30. 同じテーブル内の各カテゴリの上位n個のレコードを選択
どのツールを使用できますか?ファイルはどのように整理されていますか? –
ここで同じ質問:http://stackoverflow.com/questions/9074463/most-suitable-sorting-algorithm –
ファイルはランダムな順序で数字で整理されています... 私は前の投稿に答えがあると思います...バリエーションmax heap sort shudがsolfの1つになる – Akshay