シミュレーションラブ

「嫌な役回りを押しつけられたって俺はいいんだよ。お前は構わずこんな所で立ち止ってないで前に進むべきなんだ。それが俺の願いだ」

変化する点数ランキングの内部処理は、一般人には関係ない複雑な世界なのだ。

 プログラマーになれば、この仕組みは常識であるので、知っていて当然の内容なんですが、一般の人は「車のエンジン」を使うことはできても、仕組みや組み立ては出来ない。それと同じでちょっと知的なアルゴリズムをご紹介しようと思う。

 オンラインゲーム「X-BEAT(仮名X3)」では、ゲームプレイ中、常時部屋内の順位が変化する。その変化は個人が獲得した点数による変化だ。

 今回はそんなオンラインゲームで、1位から6位の点数順位を順を表示する時に、内部で行っている仕組みをご紹介したいと思います。知っていても得はしないだろうけど、理解すると面白い数学的な考え方なので、知的な気分になれるかも。
 まずは一例として、初歩的な隣接交換法から。(確か、バブルソートって言えばプログラマーは分かるのかな?)。

 6人いて点数がそれぞれ、30,10,20,40,60,50点だったとする。
 これを昇順・・・つまり、点数が低い方から順番に並び変えたい。
 そうすれば、高い方から順に6位5位4位・・・と点数順に順番が決まることになる。
 ようするに、10.20.30.40.50.60点と並び直せばいいのだから右から1位の点数、2位の点数・・・となっていく訳である。

 隣接交換法は、左の数字から順に入れ替えていく・・ということをするのが基本。


①まず、一番最初に左から1番目の数字「30」とその右の2番目の数字「10」を比べ、右数字のが点数が低かったら入れ替える。今回は低いので、10と30を入れ替え、並び順は10,30,20,40,60,50となる。

②次に2番目の数字「30」と3番目の数字を①と同じように比べ、右の数字の点数が低かったら入れ替える。2番目の数字「30」と3番目の数字「20」を比べると右の数字のが点数が低いのでまた並び変え、10,20,30,40,60,50となる。

③次に3番目の数字「30」と4番目の数字「40」を比べる。今回は右の数字のが数値は高い。高いので何もせず、そのまま並べ替えない。10,20,30,40,60,50

④次に4番目の数字「40」と5番目の数字「60」を比べ、右の数字が高いのでそのまま。10,20,30,40,60,50

⑤5番目の数値と6番目の数値は右の50の数値のが低いので並び変え。10,20,30,40,50,60

⑥すると一番最後6番目の数字だけ大きな数字として確定される。今回はたまたま例が悪かったので、これでそろってしまったが、次の手順としてはまた左の1番目から5番目まで①~⑤の同じことを繰り返す(なぜ最後の6番目まで繰り返さないのかといえば、もう既に6番目は最大値として固定されてしまったから)。

⑦すると、5番目の数値50が確定。先ほどの最大値60もすでに確定しているため、これで2つ確定する。

⑧同様に1番目~4番目を繰り返し、それが終わったら、1~3番目・・・1~2番目と減らしていけば、

10,20,30,40,50,60と数字が並ぶことになる。

 これがランキングとして内部でソートされているごく一例。
 スコアが常時動くゲームでは、スコアが変わる毎、もしくは、一定間隔毎にこの①~⑨のステップを毎回毎回行っており、どれだけコンピューターがすごいことをしているのか分かっていただけるだろうか。

 とはいうものの、これらのソートはあくまでも一例であって、まだまだ他にもランキングとして並び変える方法は存在する。この方法は、プログラマーが対して頭を使わず添え字(i)などを使って簡単にコーディング出来る為、簡単に理解しやすい方法なのである。

 あなたは理解できましたか?

Posted by iamweak - 2009年02月26日 20:13 | トラックバック (0)

この記事のトラックバックURL


※TBは、当サイトへリンクが無いと自動拒否されます(承認制)。記事に関係ないTBはご遠慮願います。

この記事に対するトラックバック

この記事に対するトラックバックはまだありません。



Powered by Movable Type 3.33-ja and Wandering Wind
Copyright : (C) iamweak All Rights Reserved.