Рекомендуємо, 2024

Вибір Редакції

Різниця між лінійним пошуком і двійковим пошуком

Лінійний пошук і бінарний пошук - це два методи, які використовуються в масивах для пошуку елементів. Пошук - це процес пошуку елемента в списку елементів, що зберігаються в будь-якому порядку або випадково.

Основна відмінність між лінійним пошуком і двійковим пошуком полягає в тому, що бінарний пошук займає менше часу для пошуку елемента з відсортованого списку елементів. Отже, можна зробити висновок, що ефективність методу бінарного пошуку більше, ніж лінійний пошук.

Інша відмінність між ними полягає в тому, що існує передумова для бінарного пошуку, тобто елементи повинні бути відсортовані, а в лінійному пошуку такого передумови немає. Хоча обидва методи пошуку використовують різні методики, які обговорюються нижче.

Діаграма порівняння

Основа для порівнянняЛінійний пошукДвійковий пошук
Складність часуO (N)O (log 2 N)
Найкращий часПерший елемент O (1)Центр елемента O (1)
Необхідна умова для масивуНе потрібноМасив повинен бути впорядкованим
Найгірший випадок для N числа елементівПотрібно N порівняньМожна укласти тільки після log 2 N порівнянь
Може бути реалізовано наМасив і зв'язаний списокНе можна безпосередньо реалізувати у списку зв'язаних
Вставити операціюЛегко вставляється в кінець спискуВимагайте обробки, щоб вставити на своє місце для збереження відсортованого списку.
Тип алгоритмуІтеративний характерРозділяйте і перемагайте в природі
КорисністьПростота у використанні і не потрібна будь-які впорядковані елементи.У будь-якому випадку складний алгоритм і елементи повинні бути організовані в порядку.
Рядки кодуМеншеБільше

Визначення лінійного пошуку

У лінійному пошуку кожен елемент масиву витягується один за одним у логічному порядку і перевіряється, чи є він бажаним елементом або ні. Пошук буде невдалим, якщо всі елементи будуть доступні, а потрібний елемент не буде знайдено. У найгіршому випадку, число середнього випадку, можливо, доведеться сканувати половину розміру масиву (n / 2).

Тому лінійний пошук можна визначити як техніку, яка послідовно проходить по масиву, щоб знайти даний елемент. Наведена нижче програма ілюструє пошук елемента масиву за допомогою пошуку.

Ефективність лінійного пошуку

Споживання часу або кількість порівнянь, виконаних при пошуку запису в таблиці пошуку, визначає ефективність техніки. Якщо бажаний запис присутній в першій позиції таблиці пошуку, то проводиться лише одне порівняння. Коли бажаний запис є останнім, то потрібно зробити n порівнянь. Якщо запис представляється десь у таблиці пошуку, то в середньому буде кількість порівнянь (n + 1/2). Найгіршим варіантом ефективності цієї методики є O (n) - порядок виконання.

C Програма для пошуку елемента з лінійною технікою пошуку.

 #include #include void main () {int a [100], n, i, item, loc = -1; clrscr (); printf ("Введіть число елемента:"); scanf ("% d", & n); printf ("Введіть цифри: n"); для (i = 0; i <= n-1; i ++) {scanf ("% d", & a [i]); } printf ("Введіть номер для пошуку:"); scanf ("% d", & item); для (i = 0; i = 0) {printf ("n% d знаходиться в позиції% d:", item, loc + 1); } else {printf ("Немає пункту"); } getch (); } 

Визначення двійкового пошуку

Двійковий пошук є надзвичайно ефективним алгоритмом. Цей метод пошуку витрачає менше часу на пошук даного елемента при мінімально можливих порівняннях. Щоб виконати бінарний пошук, спочатку потрібно сортувати елементи масиву.

Логіка цієї методики наведена нижче:

  • Спочатку знайдіть середній елемент масиву.
  • Середній елемент масиву порівнюється з елементом для пошуку.

Можливі три випадки:

  1. Якщо елемент є обов'язковим елементом, пошук виконується успішно.
  2. Коли елемент менше потрібного елемента, то шукайте тільки першу половину масиву.
  3. Якщо вона більше потрібного елемента, то шукайте у другій половині масиву.

Повторіть ті самі дії, доки елемент не буде знайдений або не вичерпається в області пошуку. У цьому алгоритмі кожна область пошуку часу зменшується. Тому кількість порівнянь не більше log (N + 1). Як результат, це ефективний алгоритм у порівнянні з лінійним пошуком, але масив необхідно відсортувати, перш ніж виконувати бінарний пошук.

C Програма для пошуку елемента з технікою бінарного пошуку.

 #include void main () {int i, beg, end, middle, n, пошук, масив [100]; printf ("Введіть число елементів n"); scanf ("% d", & n); printf ("Введіть% d цифр n", n); для (i = 0; i <n; i ++) scanf ("% d", & масив [i]); printf ("Введіть номер для пошуку \ t scanf ("% d", & search); beg = 0; end = n - 1; середній = (початок + кінець) / 2; while (beg <= end) {if (масив [посеред] кінець) printf ("Пошук не вдалося!% d немає у списку. \ t getch (); } 

Основні відмінності між лінійним пошуком і двійковим пошуком

  1. Лінійний пошук носить ітеративний характер і використовує послідовний підхід. З іншого боку, бінарний пошук реалізує підхід поділу та перемоги.
  2. Часова складність лінійного пошуку становить O (N), тоді як бінарний пошук має O (log 2 N).
  3. Найкращий час у лінійному пошуку - для першого елемента, тобто O (1). На відміну від, у бінарному пошуку, це для середнього елемента, тобто O (1).
  4. У лінійному пошуку найгіршим для пошуку елемента є N-число порівняння. Навпаки, це лог 2 N номер порівняння для бінарного пошуку.
  5. Лінійний пошук може бути реалізований як у масиві, так і у зв'язаному списку, тоді як бінарний пошук не може бути реалізований безпосередньо на пов'язаному списку.
  6. Як відомо, двійковий пошук вимагає відсортованого масиву, який є причиною. Для обробки потрібного місця потрібно зберегти сортований список. Навпаки лінійний пошук не вимагає відсортованих елементів, тому елементи легко вставляються в кінець списку.
  7. Лінійний пошук простий у використанні, і немає необхідності в будь-яких впорядкованих елементах. З іншого боку, алгоритм бінарного пошуку, проте, складний, і елементи обов'язково розташовуються в порядку.

Висновок

Як лінійні, так і двійкові алгоритми пошуку можуть бути корисними залежно від програми. Коли масив є структурою даних і елементи розташовані в сортованому порядку, то для швидкого пошуку бажаний двійковий пошук. Якщо пов'язаний список є структурою даних незалежно від того, як розташовані елементи, лінійний пошук приймається через відсутність безпосередньої реалізації алгоритму бінарного пошуку.

Типовий алгоритм двійкового пошуку не може бути застосований до зв'язаного списку, оскільки пов'язаний список є динамічним за природою і не відомо, де середній елемент фактично призначений. Отже, існує вимога до розробки варіації алгоритму бінарного пошуку, який може працювати на пов'язаному списку, оскільки бінарний пошук виконується швидше, ніж лінійний пошук.

Top