4、リーダー選挙問題2
O(n^2)のメッセージ数がかかるアルゴリズムを紹介した。以下では、O(n log n) のアルゴリズムを紹介する。
基本的なアイデアを示す。双方向リング上で考える。
ばつ印は、除外プロセスとする。それ以外は、始動プロセス。隣接したプロセス同士でプロセッサ番号を比較し、自分の番号が隣接したプロセッサ番号の中で、一番大きくないときに自分を除外プロセスへ移行する。このように、隣接したプロセスと自分のプロセスを除外していく。このようにすることで、少なくとも半分のプロセスへ減らせる。
以上は、双方向リング上で考えたが、これを短方向リング上で実現する。アルゴリズムを以下に示す。
アルゴリズム3 [待機状態] (1) メッセージを受信しているなら (4) へ [始動状態] (2) 自分の番号を p とした時、 (p,0) を送信してから (3) へ行く。 (3) メッセージを受信しているなら受信レジスタをクリアする。 そのメッセージ (a,i) の i が 0 なら (a,i+1) を送信し,i が 1 なら停止する。 (4) 全ての受信メッセージをそのまま送信する。
(4)が除外されたプロセスに該当する。
(休憩)