トップノードアルゴリズム

トップノードアルゴリズムは、リソース予約カレンダーを管理するためのアルゴリズムです。このアルゴリズムは2003年に初めて公開され[1]、2009年に改良されました[2]。このアルゴリズムは、リソースが多くのユーザー間で共有される場合に使用されます(例えば、通信リンクの帯域幅や大規模データセンターディスク容量など)。

このアルゴリズムにより、ユーザーは次のことが可能になります。

  • 特定の期間に利用可能なリソースの量を確認する
  • 特定の期間に一定量のリソースを予約する
  • 以前の予約を削除する、
  • カレンダーを前へ進めます (カレンダーは定義された期間をカバーしており、時間の経過とともに前へ進めなければなりません)。

原理

カレンダーは二分木として保存され、葉は基本期間を表します。他のノードは、その子孫ノードすべてによってカバーされる期間を表します。

7時間制カレンダーの例(基本周期は1時間)
7時間制カレンダーの例(基本周期は1時間)
7時間制カレンダーの例(基本周期は1時間)

予約期間の期間は、「トップノード」の集合によって表されます。この集合は、予約期間を正確にカバーする最小のノード集合です。

バイナリツリーのノードが特定の予約の「トップノード」となるのは、

  • その子孫はすべて予約期間内にあり、
  • ルート ノードであるか、親ノードの少なくとも 1 つの子孫が予約期間外です。
1:00から5:59までの予約のトップノード
1:00から5:59までの予約のトップノード
1:00から5:59までの予約のトップノード

各ノードには次の値が格納されます。

q(ノード) = max(q(左の子), q(右の子))
          + このノードを「トップノード」とするすべての予約の予約済みリソースの合計量

(コードの最適化のため、この合計の 2 つの部分は通常別々に保存されます。)

パフォーマンス

このアルゴリズムの利点は、新しいリソース予約を登録する時間がカレンダーのサイズのみによって決まり、予約の総数には左右されないことです。

暦の基本周期の数を nとします。

特定の予約における「トップノード」の最大数は 2.log n です。

  • 特定の期間に利用可能なリソースの量を確認する:O(log n
  • 特定の期間に一定量のリソースを予約する:O(log n
  • 以前の予約を削除するには:O(log n
  • カレンダーを進めるには:O(log n + M.log n)

ここで、Mは追加されたカレンダー期間中にアクティブな予約の数です。

カレンダー終了後に予約が許可されない場合は 、 M = 0 になります。)

参考文献

  1. ^ 関連する米国特許(アルゴリズムは2008年からパブリックドメインです)
  2. ^ 改良されたトップノードアルゴリズム
  • (フランス語) Cソースコード
「https://en.wikipedia.org/w/index.php?title=Top-nodes_algorithm&oldid=1114235515」から取得