Tip:
Highlight text to annotate it
X
[Powered by Google Translate] [Лінійний пошук]
[Патрік Шмід, Гарвардський університет]
[Це CS50.] [CS50.TV]
Пошук є те, що ви, ймовірно, частіше, ніж ви думаєте.
Очевидно, що кожен раз, коли ви відкриваєте веб-браузер
і пошуку на веб-сторінці -
Або шукати друзів на вашій улюбленій соціальній мережі -
Ви шукаєте.
Але це тільки мала частина пошуків, що ви робите на щоденній основі.
Якщо ви хочете, щоб знайти, що одна синя сорочка в шафі,
або що ідеальний червону блузку з цієї нагоди,
Ви шукаєте.
Коли ви йдете в магазин, ви ніколи не були перш,
і ви шукаєте брокколі в проході продукти
Ви шукаєте.
Те, що ви, можливо, почали помічати
є те, що в залежності від того, що ви шукаєте
або як елементи організовані, коли ви шукаєте для них
він має вплив на як ви будете шукати.
Наприклад, якщо ваші сорочки висять в шафі,
Ви, ймовірно, може просто забрати його без довгих пошуків.
Якщо ви припускаючи, що ви повинні йти до вівтаря
Для отримання брокколі, ви, ймовірно, повинні дивитися на все іншими овочами
перш, ніж ви виявите, що броколі.
Лінійний пошук є прикладом одного з таких методів пошуків - або алгоритм.
Як випливає з назви,
Цей метод шукає елемент в лінійному порядку, один за іншим.
Так що, коли ви дивитеся на результати вашої улюбленої пошукової системи
а ви читали в списку результатів,
Ви використовуєте лінійний пошук.
Добре. Давайте подивимося на прикладі.
Скажімо, у нас є список чисел - 2, 4, 0, 5, 3, 7, 8, і 1 -
і ми шукаємо число 0.
Очевидно, що ви можете просто бачити, що 0 знаходиться в третій позиції.
Але, комп'ютерна програма не так пощастило.
Він може тільки "побачити" одне число за один раз.
Так, починаючи з початку списку,
це тільки "бачить" 2.
Потім програма перевіряє - знаходиться в 2 дорівнює 0?
Очевидно, що ні. Таким чином, вона йде на наступний номер, 4.
Чи має 4 рівні 0? Ні.
Наступний, 0. Ах! Нульова дорівнює 0.
Там у нас це є! Це в третю позицію.
Добре. Давайте подивимося на деякі псевдокод.
Це всього лише пару рядків, але давайте дивитися на це по одному рядку за раз.
По-перше, давайте визначимо функцію - і ми будемо називати його лінійний пошук -
і вона приймає два аргументи - ключ і масив.
Головне те, що значення, яке ми шукаємо,
так що і в попередньому прикладі, який був нульовий.
Масив являє собою список номерів
, Який має всі цінності, які ми збираємося шукати.
Отже, що ми хочемо зробити, це ми хочемо, щоб дивитися на -
з усіх позицій, тому, починаючи з самого початку масиву
сезам самого кінця масиву - так що довжина масиву -
дивитися на кожну позицію і перевірити кожен з них.
Так от що, що "за" петля робить.
І на кожній позиції, ми збираємося сказати
"Це значення в цьому поточна позиція дорівнює ключ, який ми шукаємо?"
Так що - і в попередньому прикладі знову, ключ був 0 -
таким чином, ми говоримо "це масив в позиції я дорівнює нулю?"
Якщо це так, ми збираємося повернути "я", тому що це поточне положення ми знаходимося.
Так, у попередньому прикладі,
, Яка була третій позиції.
Якщо ми пройшли через весь масив
і ми не знайшли нічого -
так що давайте говорити, що ми шукали номер 500
які явно не був у цьому прикладі -
Ми повинні повернути те,
і ми збираємося повернути -1.
І ми просто повертається -1, оскільки це положення
, Яке не існує в масиві.
І так, що значить, коли ви отримаєте його назад з функцією
він говорить: "Хм, ладно. Думаю, я нічого не знайшов.
Так що 500 ніколи не був там. "
Гарна річ про лінійного пошуку є те, що
вона буде працювати на будь-якому список елементів,
незалежно від того, як елементи впорядковані.
Це не має значення, де брокколі в продукти проходу.
Поки ви йти до вівтаря з початку до кінця,
Ви зобов'язані знайти його,
припускаючи, що магазин не закінчилася брокколі, звичайно.
Але це найбільша сила також, що це найбільша слабкість.
Скажімо, у вас є список двохсот номерів
, Які сортуються від 1 до 200.
Якщо ви шукаєте номер 198,
Ви повинні шукати майже весь список номерів
перш ніж ви знайдете той, який ви шукаєте.
Там повинно бути краще!
Будьте впевнені, що є.
Але це вже тема для іншого відео.
Крім того, не хвилюйтеся!
Просто тому, що лінійний пошук не найкраще рішення в будь-якій ситуації,
це не означає, що воно не стане в нагоді.
В іншому випадку, як би ви виявили, що броколі в проході продукти?
Мене звуть Патрік Шмід, і це CS50.
[CS50.TV]