1
如果標題中的術語關閉,很抱歉。我試圖通過更頻繁地使用它們來更好地理解這些術語。在三元堆中實現trickledown操作的最有效方式
無論如何,我目前正在研究一個數據結構類(使用C++)的實驗,我必須建立一個三元堆並將它與已經給我們的二進制堆進行比較。由於我有一些額外的時間,因此我想要清除代碼中的一些細節,以便儘可能高效地運行。
我最關心的是我使用的if-else語句的數量。我實際上需要花十分鐘的時間,並將它們的佈局組織在紙上,這樣我纔不會感到困惑。 (我不是在抱怨,我只是不知道這是否是解決這個問題或者不是最好的方式。)
template<class T>
void TernaryHeap<T>::trickleDown(int i) {
do {
int j = -1;
int r = right(i);
if (r < n && compare(a[r], a[i]) < 0) {
int l = left(i);
if (compare(a[l], a[r]) < 0) {
j = l;
} else {
j = r;
}
int m = mid(i);
if (compare(a[m], a[r]) < 0) {
j = m;
} else {
j = r;
}
} else {
int l = left(i);
if (l < n && compare(a[l], a[i]) < 0) {
int m = mid(i);
if (compare(a[m], a[l]) < 0) {
j = m;
} else {
j = l;
}
}
}
if (j >= 0) a.swap(i, j);
i = j;
} while (i >= 0);
}