Garbage Collection

塵も積もれば山

目次

Blog 利用状況

ニュース

C++とかC#とか数学ネタを投下していく予定です。

[その他のページ]
日々の四方山話を綴った日記出水の日記帳

書庫

日記カテゴリ

[アルゴリズム]はみだしシェアソート6

前回で終わりのような気がしていたが別にそんなことはなかったぜ!

今まで紹介したシェアソートは要素の数が平方数でした。
サンプルなので奇麗に正方形に並べられる個数ばかり選んでたわけです。

シェアソートは矩形(長方形)に並べられれば良いのですが、
要素の数が素数だった場合はそれすら適いません。

ということでそんな半端の状態のシェアソートです。

39個の要素でシェアソートを行おうとすると、以下のようになります。

実は、この形でも以下のように分割してシェアソートを行えば問題がありません。

豆知識として、縦ソートをするときに40以上の位置を差したら終端としておくと、
どこで数が変わったかというのを意識しないで済みます。

ですが、折り返しで終わった場合はちょっと工夫が必要です。
以下のような場合ですね。

空白に最大値を入れてソートでも良いのですが、スマートではないです。
そこで、1行6個ではなく7個で作りなおしてみます。

うまく行きました。

ちょうどいい一行の数の求め方ですが、今回はこうやっています。

 44 ÷ 6 = 7 余り 2

1行6個で並べれば7行と2個と読めますが、
逆に1行7個で並べれば6行と2個という読み方をします。
適当な偶数で割ってやってその商を1行の個数とすれば
必ず都合のいい配置になってくれるわけです。

投稿日時 : 2008年9月28日 20:03

Feedback

# re: [アルゴリズム]はみだしシェアソート6 2008/09/28 20:52 れい

> とりあえず、n^2に満たない時は後で書きます

おぉ。
ありがとうございます。

> 複数コアを考えたソートなら、なおさらクイックソートだけを使った方がよくないです?
シェアソートは縦横の切り替わりの同期が結構かかると思うんですよね

複数コアという概念を私は全然理解してないので発言は適当です^^;
CPUが複数のってるんでしょ?、程度の認識です。

PentiumProとかで386で超並列とかやってた時代、要素数一千万越えのソートとかする場合はシェアでプロセッサにタスクを割り振って、クイックでソートしてました。
同期を入れてもそれのほうが早かったです。

クイックだと分割にムラができてしまうので、コア数が増えれば増えるほど初段のシェアが効いてきました。

コア間通信のコストと兼ね合いなのでしょうが、何がどこに効いてくるのかよくわからない…

# re: [アルゴリズム]はみだしシェアソート6 2008/09/29 20:42 出水

私も複数コアとか言ってますけど
ただのマルチスレッドでしょ?という感覚です

クイックソートでいい、って言ってましたけど
冷静に考えるとこの辺はまずいソートですね
条件次第ではシェアソート最適という場合もありそう

この辺は大分まとまりかけているんだけど、
ソート以外のネタが溜まってきているんで
その辺消化しつつ、もう少し煮詰めてエントリー書きます

# re: [アルゴリズム]はみだしシェアソート6 2008/09/29 21:53 れい

> その辺消化しつつ、もう少し煮詰めてエントリー書きます

やったっ
待ってます。

# TVOCQTQFuoByzLclnz 2012/01/07 7:58 http://www.luckyvitamin.com/c-472-health-foods

Somewhere in the Internet I have already read almost the same selection of information, but anyway thanks!!...

タイトル
名前
Url
コメント