データの流れがあります。 データには商品IDと数量が含まれています。 いずれの場合も、数量に基づいて上位k製品を伝える必要があります。いつでも、数量に基づいて上位k製品を伝える必要があります
私のアプローチ:
値としてキーと製品の量、ヒープ指標として製品IDを格納する1つのハッシュマップを更新サイズk の一つのminheapを維持します。
これで、1つのデータが受信されました。製品IDがハッシュマップに存在するかどうかを確認します。
ハッシュマップ中に存在する場合:
更新(製品数量が増加されるように)ヒープ内の製品数量。 更新ハッシュマップ
に新しい数量、新しいインデックスをハッシュマップに存在しない場合:それが大きければ、ヒープのルートを削除し、 新製品の量がヒープに最小値よりも大きいか否か
チェック新しい価値で置き換えてください。
問題: 私のアプローチの問題は、製品数が増加するためいつでも製品IDを繰り返すことができるということです。 現在、いくつかの製品がヒープにないかもしれないが、将来ヒープの一部になる可能性があるため、製品数量とヒープインデックスの両方を保存できるように私はどのようなアプローチをとるべきですか?
受信したデータの数量フィールドがその商品の現在の総量である場合は、私はあなたの体系に固執します。あなたが以前に受け取った数字の上に追加するために毎回追加の数量を受け取った場合、それは考えることです。どちらのシナリオでも、私は 'productID'をマップキーとして使用します。 – Redu
商品IDが繰り返されるたびに追加数量が受信されます。 私はTRIEを使用することを考えていました.trieNodeには、製品数量とheapIndex(ヒープに存在しない場合は-1)を含めることができます。 –
これを扱う1つの方法は、確率に基づいています。したがって、任意の時点で、上位100個の要素を探し、上位10K要素のヒープを維持する必要があります。したがって、データの配信が良好である場合、ストリームに拍車が多すぎない場合は、上位100の数字について高い確率で正しいとします。もちろん、多くの場合、製品数量は正確ではありません。 –