第21講 並び換え

第8話 グループ分け
郵政省が民営化される前の話ですから、
今から10数年前の頃でしょうか。
私の記憶によるものですから、
確かな話しではありませんが、
郵便物をグループに分けてから分類するようにしたら、
仕分けの速度がアップして、
郵便物を早く配達できるようになった、
と郵政省が発表していました。
全部をまとめて分類するのではなく、
機械的にいくつかのグループに分けてから、
届け先を仕分けすると早くなったというわけです。
このアイデアを並び換えに採用できないでしょうか。
データを複数のグループに分け、
その中で並び換えをしてから、
全体を並び換えたら、
並び換えのスピードアップが図れないでしょうか。
6 8 3 4 8 2
を例にして思考実験してみましょう。
以下、青は比較、薄茶は交換、緑は何もしないを表し、
丸数字はステップ数を示します。
緑は何もしないを表していますので、ステップ数としてはカウントしません。
6 8 3 4 8 2

6 8 3

4 8 2
のグループに分けてから並び換えをします。

前半グループ 6 8 3 の並び換え
1巡目
6 8 3 @
6 8 3 
6
8 3 A
6
3 8 B
2巡目
6 3 8 C
3 6 8 D
3
6 8 E
3
6 8 
3巡目
3 6 8 F
3 6 8 
3 6 8 G
3 6 8 
交換が1回も発生せず、前半グループの並び換え成功

後半グループ 4 8 2 の並び換え
1巡目
4 8 2 @
4 8 2
4
8 2 A
4
2 8 B
2巡目
4 2 8 C
2 4 8 D
2
4 8 E
2
4 8
3巡目
2 4 8 F
2 4 8
2
4 8 G
2
4 8
交換が発生せずに、後半グループの並び換えに成功。
この2つはそれぞれのスレッドに並行処理させますので、
グループ別のステップ数は多い方を数えれば良いわけです。、
今の事例では両方とも同じ8ですから、8です。

前半と後半を合体した 3 6 8 2 4 8 の並び換え
1巡目
3 6 8 2 4 8 H
3 6 8 2 4 8
3 6 8 2 4 8 I
3
6 8 2 4 8
3 6
8 2 4 8 J
3 6
2 8 4 8 K
3 6 2
8 4 8 L
3 6 2 4
8 8 M
3 6 2 4
8 8
2巡目
3 6 2 4 8 8 N
3 6 2 4 8 8
3
6 2 4 8 8 O
3
2 6 4 8 8 P
3 2 6 4 8 8 Q
3 2
4 6 8 8 R
3 2 4
6 8 8 S
3 2 4
6 8 8
3 2 4 6
8 8
3 2 4 6
8 8
3巡目
3 2 4 6 8 8 繪
2 3 4 6 8 8 繪
2 3 4 6 8 8 繪
2 3
4 6 8 8 繪
2 3
4 6 8 8
2 3 4
6 8 8 繪
2 3 4 6 8 8
2 3 4 6 8 8
2 3 4 6
8 8
4巡目
2 3 4 6 8 8 繪
2 3 4 6 8 8
2
3 4 6 8 8 繪
2
3 4 6 8 8
2 3
4 6 8 8 繪
2 3
4 6 8 8
2 3 4
6 8 8 繪
2 3 4
6 8 8
2 3 4 6
8 8
2 3 4 6
8 8
交換が発生せず、4巡目で終了

全体のステップ数は32回でした。
グループ分けしない場合のステップ数は果たしてどうでしょうか。




第7話へ 第9話へ

a

eclipse c++ 入門講義第1部へ

eclipse c++ 入門講義第2部へ


魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
VC++ C言語 C++ 入門 初心者 基礎から応用まで
本サイトトップへ