特定のオブジェクトのセットを「ヒープ化」するために使用できるヒープ (Max-Heap、最大要素がルートであることを意味します) クラスを作成しています。このヒープの一般的な構造と、さまざまなアルゴリズムを認識しています。現在、一般的なオブジェクトの場合、比較は定義されていません。したがって、2 つのオブジェクト間の比較を定義する必要があります。私の質問は、この比較関数をクラス ヒープまたはクラス オブジェクトで定義する必要があるかどうかです。クラス Heap で定義すると、使用するすべてのデータ構造に対して、効率的ではない比較関数を書き直す必要があります。これは、オブジェクトを少し変更すると、膨大な数の場所で比較が変更される可能性があるためです。では、これはどのように処理されますか?ありがとうございました。
class Object{
int value;
Object (int a) {
value=a;
}
boolean isLessThan(Object a, Object b){
if (a.value<=b.value){
return true;
}
else return false;
}
}
class Heap{
Object [] heap=new Object[1000];
int size=0;
Heap() {
}
void HeapifyDownwards (int index){
int left_child=2*index+1;
int right_child=2*index+2;
if (size>right_child){
// both right and left child exist
Object right= heap[right_child];
Object left= heap[left_child];
Object node = heap[index];
if ((isLessThanEqualTo(right,node)) && (isLessThanEqualTo(left,node))){
return;
}
}
else if (size==right_child){
//only left child exists
}
else {
// no child exists
}
}
}