第23講 並び替えソフトをマルチスレッド化する
第1話 隣項交換繰り返し法をマルチスレッド化するには?
第21講で考えた隣項交換繰り返し法をマルチスレッド化するにはどうしたらよいでしょうか。
方法は
第19講 .NETによるマルチスレッド
※この講で扱う.NETによるマルチスレッドは、C言語およびC++のマルチスレッドではありません。VC++によって拡張された部分のマルチスレッドと考えていただいてよいかと思います。
第1話 普遍版魔方陣自動生成プログラムをマルチスレッド化するには?
第2話 マルチスレッド解答例??
第3話 gcnew Threadによる簡単なマルチスレッド
第4話 和マルチスレッド解答例
第5話 素数探索マルチスレッド解答例
第6話 .NET による普遍版魔方陣自動生成マルチスレッド
第7話 Parameterizedによって関数を1つにまとめる
を使いましょう。
問題は、内容です。
どのようにしたらマルチスレッド化できるでしょうか。
最大値(最小値)排除繰り返し法とのスピード比較ですから、
データ数は1万以上の単位になりますが、
問題の本質を掴むために、
データ数を6個の次の例で考えてみましょう。
68,16,5,3,84,25
で考えてみましょう。
いったい何巡目で並び替えが終了するでしょうか。
第1巡目
68,16,5,3,84,25
68,16,5,3,84,25
68,16,5,3,84,25
68,16,5,3,84,25
68,16,5,84,3,25
68,16,5,84,3,25
68,16,5,84,25,3
第2巡目
68,16,5,84,25,3
68,16,5,84,25,3
68,16,5,84,25,3
68,16,84,5,25,3
68,16,84,5,25,3
68,16,84,25,5,3
68,16,84,25,5,3
第3巡目
68,16,84,25,5,3
68,16,84,25,5,3
68,84,16,25,5,3
68,84,16,25,5,3
68,84,25,16,5,3
68,84,25,16,5,3
68,84,25,16,5,3
第4巡目
68,84,25,16,5,3
84,68,25,16,5,3
84,68,25,16,5,3
84,68,25,16,5,3
84,68,25,16,5,3
84,68,25,16,5,3
4巡目で並び替えが成功しました。
これを前半3つと後半3つに分けて並び替えをしたらどうでしょうか。
第1巡目
68,16,5 3,84,25
68,16,5 84,3,25
84,3,25
84,25,3
第1巡目でいずれのグループも並び替えが終了しました。
次は合体して並び替えです。
68,16,5,84,25,3
第2巡目
68,16,5,84,25,3
68,16,5,84,25,3
68,16,5,84,25,3
68,16,84,5,25,3
68,16,84,5,25,3
68,16,84,5,25,3
第3巡目
68,16,84,5,25,3
68,16,84,5,25,3
68,84,16,5,25,3
68,84,16,5,25,3
68,84,16,5,25,3
68,84,16,25,5,3
68,84,16,25,5,3
第4巡目
68,84,16,25,5,3
84,68,16,25,5,3
84,68,16,25,5,3
84,68,16,25,5,3
84,68,25,16,5,3
84,68,25,16,5,3
84,68,25,16,5,3
いずれも終了するまで4巡しました。
しかし、手順総数(上の行数)を数えてみると27と24と2グループに分けた方が少なくなっています。
この効果は、データ数が増えるに従って大きくなると予想できます。
そして、グループ数も2グループより4グループの方が手順は少なくなるでしょう。
4グループに分けて、4つのグループの並び替えを並列に行えば高速が図れると期待できます。
マルチスレッド化に入る前に、
第5話 隣項交換繰り返し法自己再帰版
を2点改良しておいてください。
① プログラムをわかりやすくするためにint n,*m;をグローバル変数にして各関数の形をシンプルにする。
② 関数gの引数にグループの最初の番号と最後の番号を入れられるようにする。
第22講第6話へ 第2話へ
C言語 C++講義第1部へ
C言語 C++講義第2部へ
VB講義へ
VB講義基礎へ
vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)