動かして見る
結果ではなく、途中を見るためのジャンルです。
並べ替えは、できあがった列を見ても何が起きたのか分かりません。遅いやり方も速いやり方も、最後には同じ順番になるからです。差がついているのは並べている最中で、そこは終わってしまうと見えなくなります。ここの道具は、その最中を一手ずつ進められるようにしてあります。比べた回数も数えるので、速さの違いが「なんとなく」ではなく数で出ます。
半分ずつ探すやり方なら、100万個の中から20回ほどで見つかります。1個ずつ調べるやり方と並べて走らせると、この差が目で見えます。ライフゲームは逆に、たった4つの決まりから、動く形が生まれるところを見せます。決まりの数と、出てくるものの複雑さは比例しません。
この分野の道具(6本)
速さの差は、数を増やしてはじめて見える
100個ぐらいのデータなら、どんな並べ替え方でも一瞬で終わります。差が出るのは数が増えたときで、個数の2乗に比例するやり方と、個数×その対数に比例するやり方では、1万個で数百倍の開きになります。小さく試して速いほうが、大きくして速いとは限りません。
逆に、ほとんど並んでいるデータなら、素朴な挿入のやり方のほうが速いこともあります。実際の言語の標準ライブラリが、素朴なやり方と高度なやり方を組み合わせているのはこのためで、「いちばん速いやり方」は入力しだいで入れ替わります。
決まりの少なさと、出てくるものの複雑さは別
ライフゲームの決まりは4つだけです。それでもその場で点滅するもの、盤の上を移動していくもの、他の形を撃ち出し続けるものが現れます。しかも、この盤の上で計算ができることまで示されています。決まりが単純であることは、結果が単純であることを意味しません。
線から輪郭を取り出す処理も、やっていることは「隣の点との明るさの差を見る」だけです。差の大きいところを縁とみなすと、絵の形が浮かび上がります。難しそうに見えるものの中身が小さな決まりのくり返しでできているところを見るのが、このジャンルの持ち帰りです。