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

nu

ゲスト
1 / ?

一つずつチェック

線形検索:一つずつチェック

10枚のカードがあり、1から10までの番号が書かれています。ランダムに並べられています。

7という番号のカードを見つけたいと思います。

左から右にカードを一つずつひっくり返し、見つかるまで続けます。

線形検索 vs バイナリ検索:各カードをチェックする vs 中間にジャンプする

| シナリオ | フリップが必要な回数 |

|----------|-------------|

| ベストケース | 1フリップ (幸運な最初の試み!) |

| ワーストケース | 10フリップ (最後のカードでした) |

| 平均 | 5フリップほど |

100枚のカードを想像してみましょう。平均で約 50フリップ

1000枚のカード? 平均で約 500フリップ

見出しがわかるでしょうか? カードを2倍にすると、仕事も2倍になります。仕事は直線的に増加します。

コンピューターサイエンスでこの 線形検索 と呼ばれています - 線形は、仕事が直線的に増加することを意味します。安定して予測可能です。

線形検索は、ソートされたリストや未ソートのリストでも使用できます。これがその利点です。しかし、速度が遅くなることがあります。

名前の数

20人の名前が書かれたクラスリストがあります。

名前 'Zoe' を見つけたいと思います。

名前を一つずつチェックし、リストの先頭から下に進みます。

線形検索を使用して、リストの20個の名前で 'Zoe' を見つける場合、ベストケースのチェック回数は何ですか? ワーストケースは何ですか? 正常な平均は何ですか?それぞれの場合を説明してください。

リストの半分に切り替える

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

二分探索のルールは一つ: リストは先に並べ替える必要があります。

20人の名前のリストが A から Z になると、binary search を使用できます。

どのように機能しますか: 中央の名前 (名前 #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 回のチェック |

linear search を使用した 1,000,000 名の場合、平均で 500,000 回のチェック が必要です。

二分探索は、各回でリストを半分に切り替えます。半分に切り替えを繰り返すと、1 に非常に速く到達するため、これがなぜ速いままになる理由です。

並べ替えられたリストで 'fig' を見つける

ここに 8 個の単語の並べ替えられたリストがあります:

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

binary search を使用して 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] をバブルソートで並べ替えます。各完全なパス後にリストを表示し、完了するために必要なパスの数を教えてください。