TOP-K-周波数の問題は面接の質問であり、即ち、大容量データで最大(又は最小データ最初k)を見つけること、暗黙の条件がソート、その後、ワンタイムデータがメモリに読み込まれて、すべてのデータを保持するための十分なメモリでありますkは非現実的である前に撮影した記事。
ここでは、Java8 TOP-Kの問題を解決するために簡単なコードを使用します。複数のそのような他の非クリティカルなコードの妥当性チェックなどいくつかのパラメータを、削除、メインロジックをクリアにするために。
優先度つきキュー(PQ)は有名なニューヨーク大学教授ダグ・リーの創始者の主執筆者を含め、JDK1.5開始を提供され、彼はまた、Java JUCパッケージOHです。
スタックの優先度つきキュー同等(デフォルトはあなたが大きな山を作成する場合は、その逆が作成優先度つきキュー、以下のコードとして指定する必要があり、小さなヒープルート、ルートです)
新しい優先度つきキュー<>(maxSizeの、Comparator.reverseOrder());
ここでは、根本的な問題TOP-K(解く前に、最大トップ-K、及びk番目に小さい値の大きいルート・ヒープを解決するための小さなヒープルート)を解決するために小さな山のデフォルトであります
クラス FixSizedPriorityQueue { // カスタム優先キュー固定長(k)は、それほど問題が解決できることトップK 優先度つきキュー<整数> キュー; int型K; 公共 FixSizedPriorityQueue(int型K){ この .K = K; この .queue = 新しい新優先度つきキュー<> (K); } 公共 ボイド追加(整数E){ IF(queue.size()<K){ // 現在のキュー要素が少ない直接添加kの数、より queue.add(E); } そう { //は時間のKを超えて IF(e.compareTo(queue.peek())> 0){// 新しい要素は、要素のスタックの最上部よりも大きい場合は、新しい要素の記述は、現在のスタック要素の上部置き換えるべきである ; queue.poll() queue.add(E); } } } } パブリック クラス主に{ 公共 静的 ボイドメイン(文字列[]引数){ 最終 FixSizedPriorityQueue PQ = 新しい新しい FixSizedPriorityQueue(10 ); ランダムランダム = 新しい新しいランダム(); random.ints( 100、0、1000).forEach(PQ :: ADD); //は、ランダムな100 0-1000を生成します固定長の数とカスタムプライオリティキューを添加 しながら(!pq.queue.isEmpty()){ System.out.print(pq.queue.poll(の)+「」); //は、本実施形態では、小さなヒープルートであるため、このようにしてトップ10の値をプリントアウトするために上昇、スタック要素の上部を除去し続けます } } }