私はヒープを使用する必要があるプログラムを作成しています。私の仕分け方法以外にもすべてがうまく動作します。私は自分の論理に何が間違っているのか、何か愚かなことを逃しているのかどうかはわかりません。しかし、これを見る目の新鮮なセットがいいだろう。C++切り分けヒープ
関数は、ヒープ、ルートの場所、そして述語としてのSTLのいずれか小さい方、または大きい方の私のベクトルを渡しています。
template<class T,class P>
void upheap(vector<T>& v, int start, P func) {
T x = v[start];
while (start > 1 && func(x, v[start/2])) {
v[start] = v[start/2]; start /= 2;
}
v[start] = x;
}
何が悪いと思いますか?
ヒープのルートを通過しているとしますか?あなたは癒しを必要とする要素のインデックスを渡すべきではありませんか? –
申し訳ありませんええ、私はそのインデックス値を意味するものですね。 – rajh2504
おそらく、不変条件、事前条件、事後条件を書いて、おそらく問題が発生するでしょう。たとえば、入力時に 'HEAP(i = 0 .. start-1)'という条件がtrueになっていますか?そして、目的は、終了時に 'HEAP(i = 0..start)'という条件をtrueにすることです。 –