一種二叉堆的泛化實現

2021-09-10 13:31:53 字數 1931 閱讀 4382

本文列出了一種二叉堆的泛化實現方法

所謂二叉堆,其實就是一種完全二叉樹或者近似完全二叉樹,樹中父節點的鍵值總是保持某種固定的序關係於任何乙個子節點的鍵值,且每個節點的左子樹右子樹也都是二叉堆.

這裡列出一種二叉堆的泛化實現方法,其中值得一提的地方有這麼幾處:

完整的**可以在gist上找到:

using system;

using system.diagnostics;

using system.collections.generic;

using system.collections.objectmodel;

public class heapwhere t : iequatable

} return heap; }

/* public static heapbuild2(ienumerableitems, funcpredicate)

}return heap;

} */

funcm_predicate;

listm_items = new list();

public int count }

public readonlycollectionitems }

public t this[int index] }

public heap(funcpredicate)

int indexofrecur(t item, int itemindex)

else

else

else}}

} // default return -1

return -1; }

// return -1 when not found(recur)

public int indexof(t item)

// return -1 when not found(iterator)

public int indexof2(t item)

public void add(t item)

public void remove(t item) }

public void removeat(int itemindex) }

public void clear()

bool isvalidindex(int itemindex)

void swap(int index1, int index2) }

void heapify(int itemindex)

}else

else if (m_predicate(m_items[childindexleft], m_items[itemindex]) && !m_predicate(m_items[childindexright], m_items[itemindex]))

else

else

}// update index

childcountindexleft = itemcountindex * 2;

childindexleft = childcountindexleft - 1;

childcountindexright = itemcountindex * 2 + 1;

childindexright = childcountindexright - 1;

}else

}else

// break since reach end

break;}}

}} }

}

參考資料
不出意外的話,這應該是 2019 新年之前的最後的一篇博文,來年繼續吧~

一種對二叉堆刪除最小的優化演算法的C 實現

對binary heap進行deletemin操作,是o logn 的。基於下濾的deletemin,最壞情況下每次操作需要比較2logn次。下面介紹一種演算法,最壞情況下每次操作僅需要比較logn loglogn o 1 次,然而,資料移動操作的複雜度是相同的 從root開始,找到一條由最小chi...

二叉堆的實現

include include define max heap size 101 class binaryminheap void insert intvalue void removemin intgetmin void displayheaparray private int heaparray...

二叉堆的實現

1.堆的概念 這裡只需要注意兩點 a.堆的儲存方式 就是順序儲存在陣列中,在二叉樹中表現為滿二叉樹 b.堆的用處 用於排序,查詢最大最小都非常方便 2.堆的實現 heapexception.h ifndef heapexception h define heapexception h class a...