ベース優先度つきキュー(PQ)は、問題のTOP-Kを解決するために

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の値をプリントアウトするために上昇、スタック要素の上部を除去し続けます
        } 
    } 
}

 

 

 

おすすめ

転載: www.cnblogs.com/flamestudio/p/12000151.html