1ピタゴラス数を重複さずに順番に見つける。
2素数を重複さずに順番に見つける。
3XY平面上の点を3点ずつ(線が交差する事なく)結ぶ。---できる図は1通りではありませんが、1つだけできたら終わりにする。---計算量は大体点数の4乗になります比例します。
▽2
●
a-kuma3 ●50ポイント ベストアンサー |
難しい。うん、難しいですねえ、本当に。
「並べ替え」と同列でよく題材に出されるのは「探索」だと思います。
ただ、並べ替えと違ってすっきりのは、事前に並べ替えておいたり、ハッシュ値を求めておくのは計算量の中には入れないのかい、という初学者にとってやや反則めいた部分があるところ。
あまり面白いとは言えず([2]に違反)、4つ以上のアルゴリズムではない([4]に違反)ので、題意にもそぐわず。
計算量のオーダーって、考え方としては大切だけどちょっと古いかなあ、と思います。
「古い」というのは、それを気にしなくちゃいけない場面が少なくなってしまったから、という意味です。
昔は、限られた領域の中で、比較演算(引き算)のコストが馬鹿にならなかったから、それを減らすことが限りある CPU リソースを有効に使う、という意味ではとても大切だった。
今は、CPU リソースがふんだんにあるので、比較演算よりも、それの準備にかかるコストの方が馬鹿にならない時代になったなあ、と。
極端なケースで言うと、あるデータを整列するときに、それを比較するための基準値は DB をアクセスすると手に入る状況。
比較用の関数を渡せるようなライブラリを備えているものが多いので、その比較用の関数の中で DB をアクセスに行っちゃう。
先に DB をアクセスしておいて、比較用の値はあらかじめ取得しておこうね、と。
# ん? DB のアクセスにコストがかかるから、計算量のオーダが大切という話にもなる?
複数のアルゴリズムがあって、題材が面白い、という意味では、オセロやチェスの最適手を求める、というのが良いかな、とは思うのですが、面白いというところに達するまでの時間がかかり過ぎるのが難点。
MIN-MAX 法の話があって、取りうる手が木構造で表現できて、αβ刈りまでいって、ようやく計算量の話になる。
でも、どこで計算を打ち切るか、って部分が大きいので、ランダウの記法で表される計算量の理解には、すんなりとはいかないかな...
「ソート以外の」という [1]に違反しているんですが、並べ替えの過程を図示するの、って、初めて見たときに面白いと思ったんですけれど、どうでしょう。
http://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/index.html
100個の配列に、1?100までの数字が入っていて、十分にシャッフルされている。
横軸に、配列のインデックス。縦軸に、その値をとってプロットすると、並べ替える前は、プロットの点が一様に散らばっているように見えます。
そのグラフを、並べ替えの過程の途中で表示させると、何ステップで、どのように並べ替えられていくのかが目で見てわかります。
端から順番に並べ替えていくと、きれいに並んでいく様子が分かるけど、完了するまでに時間(ステップ数)がかかる。
よく分からないけど、全体的にざっくりと並べ替えていく方法だと、最初は並び替えられているのかどうか、よく分からないけど、ステップが進むにつれて、ざくざくときれいに整列していく。
計算量のオーダや、各アルゴリズムの計算過程、加えて、自分がひねり出すようなロジックは得てして効率は良くない、というところが直観的に理解できるのではないかな、と、思います。
ソート以外だと、エイトクイーンが定番ですね。
条件の[4]までは満たしていると思います。
8クイーンのどのあたりが教材として優れているかといえば、
チェスの盤面がイメージしやすいため、
何をしようとしているか想像しやすいところにあります。
逆に高度なアルゴリズムでは、初見の生徒が
何をしているかパッと想像できないと思います。
また、一桁クイーンなら短時間で計算できるとか、
単純な解法ならコードが難解にはならないとか、
ゲームへの応用を想像できる(から面白い)、
などというのもメリットです。
それから、ご質問の意図とは異なってしまいますが、
ソートが実際にどのように使われているのか、
説明する方向でも面白くできるかもしれません。
(プログラミング自体に興味がなくても面白いと思えるかも)
たとえば、ブログのエントリが
日付順に並んでいるのもソート(の結果)ですし、
RPGの道具屋でアイテムが
価格順に並んでいるのもソートでしょう。
生徒側の心理を見たときに、
それが実用的にどのように使われているか分からないと、
自分の役に立つと思えず、興味も湧かないのだと思います。
普通の数学との関係からすると、変数の多い連立一次方程式の解法はどうでしょうか。
詳しいことは私も分かりませんが、いわゆるクラメルの公式は計算量が多くて使い物になりません。
巡回セールスマン問題、と思ったが、最適解を求めるのが大変だから、出てきた解を評価できないなぁ。