D-ary Heap
C# でパフォーマンスの高いクラスを作成できないようです。BinaryHeap
子の数 ( 、など)をハードコーディングするTernaryHeap
と、パフォーマンスが大幅に向上するようです。
BinaryHeap
myと my D-ary Heap
withの間のコードの唯一の違いは、前者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 と同じように機能します。d
uint
D-ary Heap
d=2
BinaryHeap