D-ary HeapC# でパフォーマンスの高いクラスを作成できないようです。BinaryHeap子の数 ( 、など)をハードコーディングするTernaryHeapと、パフォーマンスが大幅に向上するようです。
BinaryHeapmyと my D-ary Heapwithの間のコードの唯一の違いは、前者d=2でdは aconstであり、後者では readonly メンバー変数であることです ( readonly はパフォーマンスに影響しません)。
constバージョンはビットシフト操作にコンパイルされる可能性があるのに対し、メンバー変数バージョンはメモリフェッチ+デビジョンにコンパイルされる可能性があると思います。
クラスを次のように宣言する方法はありますか:
public class DaryHeap<T, const uint(d)> : IEnumerable<T> where T : IComparable<T>
ここで、コンパイラに「はコンパイル時の値です」const uint(d)と伝えます。したがって、 my withは my と同じように機能します。duintD-ary Heapd=2BinaryHeap