English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

nu

ゲスト
1 / ?
レッスン一覧に戻る

1つずつ確認する

線形探索:1つずつチェック

10枚のカードが顔を下にして置いてあり、1から10までの番号が付いていて、ランダムに混ぜられているとします。

番号7が書いたカードを見つけたいのです。

左から右へ1枚ずつカードをめくって、それを見つけるまで続けます。

線形探索と二分探索:すべてのカードをチェックすることと中央にジャンプすることの比較

シナリオ必要なめくり回数
最良の場合1回のめくり(幸運にも最初の1回!)
最悪の場合10回のめくり(最後のカードだった)
平均約5回のめくり

今、100枚のカードがあるとします。平均:約50回のめくり

1,000枚のカード?平均:約500回のめくり

パターンが見えますか?カード数が2倍になると、仕事量も2倍になります。仕事は直線的に増えます。

コンピュータ科学者は、これを線形探索と呼びます。線形は、仕事が一直線で増えることを意味します:一定で予測可能です。

線形探索はどのリストでも機能し、ソート済みか否かは関係ありません。それが単純性です。しかし遅くなる可能性があります。

何人の名前?

クラスの名簿に20人の名前がランダムな順序で書かれています。

名前Zoeを見つける必要があります。

リストの上から下へ、1つずつ名前をチェックします。

20人のリストで線形探索を使って「Zoe」を見つけます。最良の場合のチェック数は?最悪の場合は?適切な平均は?それぞれを説明してください。

リストを半分に削減

二分探索:中央にジャンプ

二分探索には1つのルールがあります:リストは最初にソートしておく必要があります。

20人の名前がAからZの順になっていれば、二分探索を使用できます。

仕組み:中央の名前(名前#10)を開きます。質問:Zoeはこの名前の前ですか、後ろですか?

Zはアルファベットの終わり付近にあるため、Zoeは中央より後ろです。最初の半分を捨てます。これで名前11~20だけが残ります。

それら10の名前の中央をチェックします(名前#15)。ZはMの後ろなので、Zoeは名前#15の後ろです。名前11~14を捨てます。これで名前16~20だけが残ります。

半分に削減し続けます。各チェックで残りの名前の半分を削除します。

リストサイズ二分探索での最大チェック数
20人の名前最大5回のチェック
1,000人の名前最大10回のチェック
1,000,000人の名前最大20回のチェック

これを1,000,000人の名前の線形探索と比較します:平均500,000回のチェック

二分探索は毎回リストを半分にします。繰り返し半分にすることで、1に非常に迅速に到達します。それが二分探索が非常に高速である理由です。

ソート済みリストで「fig」を見つけます

8つの単語のソート済みリストです:

1. apple 2. banana 3. cherry 4. date 5. elderberry 6. fig 7. grape 8. honeydew

二分探索を使ってfigを見つけたいです。

覚えておいてください:中央をチェックし、ターゲットが前なのか後ろなのかを尋ね、リストを半分に削減します。

二分探索を使って「fig」を見つけます。最初に何をチェックするか、次に何をチェックするかを、見つけるまで示してください。何回のチェックが必要ですか?

隣同士を入れ替えて順序付けする

バブルソート:隣同士を比較して入れ替える

バブルソート:各パスで順序が正しくない隣同士の要素を入れ替え、最大の数値をリストの終わりにバブルアップさせる

バブルソートは、一度に2つの隣同士のアイテムを比較することでリストを順序付けします。

2つの隣同士のアイテムが順序が正しくなければ、それらを入れ替えます。

何も入れ替える必要がなくなるまで、リストを何度もパスしていきます。

例:[5, 3, 8, 1]をソート

パス1:

- 5と3を比較します。5 > 3なので、入れ替え → [3, 5, 8, 1]

- 5と8を比較します。5 < 8なので、入れ替えなし → [3, 5, 8, 1]

- 8と1を比較します。8 > 1なので、入れ替え → [3, 5, 1, 8]

パス2:

- 3と5を比較します。OK → [3, 5, 1, 8]

- 5と1を比較します。5 > 1なので、入れ替え → [3, 1, 5, 8]

- 5と8を比較します。OK → [3, 1, 5, 8]

パス3:

- 3と1を比較します。3 > 1なので、入れ替え → [1, 3, 5, 8]

- 3と5を比較します。OK。5と8を比較します。OK。

完了![1, 3, 5, 8]

注意:最大の数字は各パスでリストの終わりまでバブルアップします。それはバブルソートが名前の由来です。

バブルソートは機能します。大きなリストの場合、最速ではありませんが、理解しやすいため、学習に最適です。

バブルソートで[4, 2, 7, 1]をソート

バブルソートを使ってこのリストをソートします:[4, 2, 7, 1]

各パスの後のリストを表示します。完了するまでにいくつのパスがかかるかを数えます。

バブルソートを使って[4, 2, 7, 1]をソートします。各完全なパス後のリストを表示し、いくつのパスがかかるかを教えてください。