データサイエンス応用基礎 B / 第 5 回 アルゴリズム

プログラミンで動かす

授業で書いたアルゴリズムを、ブロックに組み上げた状態で開きます / 児玉 靖司

は、ブロックを積んでプログラムを作る環境です(kodama-lab.com/lecture/programin/)。 下のボタンを押すと、そのアルゴリズムがすでに組み上がった状態で開きます。 「▶ はじめる」を押すと、いま動いているブロックが光りながら、変数とリストの中身が キャラクタの吹き出しに出ます。

ブロックはドラッグで並べ替えたり、数値を書きかえたりできます。 探すデータや並べ替えるデータを変えて、手数がどう変わるかを見てください。 「⏩ すぐ動かす」は、開いた直後に自動で走り出します。

アルゴリズムごとのボタン

番号アルゴリズムプログラミン
3 3つの制御構造 順次・分岐・くりかえしを 1 本の流れとして動かす ▶ 開く ⏩ すぐ動かす
4 変数トレース t を使って a と b を入れかえる。1 行ずつ値が変わるのを追う ▶ 開く ⏩ すぐ動かす
5 1 から N までの総和 sum に足しこんでいく、くりかえしの基本形 ▶ 開く ⏩ すぐ動かす
6 フィボナッチ数列 a と b をずらしながら 10 項まで並べる ▶ 開く ⏩ すぐ動かす
7 最大公約数 ① 試し割り 2 から順に割ってみて、両方を割り切れた最大の数を探す ▶ 開く ⏩ すぐ動かす
7 最大公約数 ② ユークリッドの互除法 あまりで置きかえていく。最小公倍数まで出す。① と手数をくらべる ▶ 開く ⏩ すぐ動かす
8 線形探索 先頭から順に。添字は 0 から始めないと先頭を見落とす ▶ 開く ⏩ すぐ動かす
8 2 分探索 範囲を lo と hi で持ち、半分ずつ捨てる。8 個なら 3 回で見つかる ▶ 開く ⏩ すぐ動かす
9 バブルソート となりどうしを入れかえる。1 周ごとに右端が確定していく ▶ 開く ⏩ すぐ動かす
10 選択ソート(最小法) 最小値を探して先頭と入れかえる。入れかえの回数がバブルより少ない ▶ 開く ⏩ すぐ動かす
11 クイックソートの分割 基準より小さい組と大きい組に分ける、1 回ぶん。全体は再帰でこれをくり返す ▶ 開く ⏩ すぐ動かす
13 スタックとキュー 同じ 1,2,3 を入れて、出てくる順のちがい(LIFO と FIFO)を見る ▶ 開く ⏩ すぐ動かす
15 計算量をくらべる 64 個を半分にし続けると 6 回で 1 個。O(log N) と O(N) のちがい ▶ 開く ⏩ すぐ動かす

この教材のために増やしたブロック

探索や並べ替えを書くには、条件で分かれること配列が要ります。 そこでプログラミンに次のブロックを足しました(もとからあるブロックはそのままです)。

リストの「○ ばんめ」は 0 から数えます。 授業の Array[0] と同じで、 先頭は 0 ばんめです(8「線形探索」の、1 から始めると先頭を見落とす話がそのまま当てはまります)。

ボタンのないもの

1・2・12 は考え方の説明で、動かす手順そのものがありません。 14「ハノイの塔」は再帰(自分自身を呼び出すこと)が必要ですが、 プログラミンには手続きを呼ぶブロックがないため、いまは対象外です。 ハノイの塔の動きは、教材ページの 14の再生バーで 1 手ずつ確かめてください。