私のプログラムでは、一番上にない優先キューから要素を削除する必要があります。それはできますか?そうでない場合は、独自のヒープを作成する以外の方法を提案してください。
70231 次
5 に答える
5
Pradip と MASh は、削除操作を実現するために時間を犠牲にします。ただし、時間の複雑さが重要な場合は、ハッシュ min_heap を使用することをお勧めします。ハッシュ テーブルには値ポインターが格納され、ポインターは min_heap を指します。つまり、min_heap の値を見つけるのに O(1) 時間を費やし、O(log(n)) を使って要素を削除 (ふるいにかけるか、ふるいにかける) できるということです。
于 2016-10-20T08:23:06.420 に答える
-4
次のアプローチは問題を解決しますが、ソリューションへの最適化された方法ではないことに注意してください。最適化されたアプローチについては、他の回答を確認してください。
の 5 番目の要素を削除しますpriority_queue<type> Q
。次に、次のようにできます。
vector<type> tempQ;
int i = 0;
int n = 5;
type t;
// backup n-1 items
while(i < n-1)
{
tempQ.push_back(Q.top());
Q.pop();
i++;
}
// remove the nth item
Q.pop();
// restore the backed up items
i = 0;
while(i < n-1)
{
t = tempQ[i++];
Q.push(t);
}
于 2016-01-27T19:28:04.907 に答える