Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритми та структури даних ЗПІ-91-20210115T104612Z-001 / Лекція 10. Алгоритми пошуку.docx
Скачиваний:
39
Добавлен:
15.01.2021
Размер:
60.92 Кб
Скачать

Приклад 3. Реалізація двійкового пошуку на мові с#

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace BinarySearch

{

class Program

{

static void Main(string[] args)

{

int i, n, key, begin, end, c;

bool x = false;

Console.WriteLine("Розмір масиву");

n = int.Parse(Console.ReadLine());

int [] mas = new int[n]; //визначення масиву

Console.WriteLine("Шуканий елемент");

key = int.Parse(Console.ReadLine());

for (i = 0; i < n; i++)

{

//формування масиву, заповнення його числами кратними n (10,20,....)

mas[i] = n * i;

Console.Write(mas[i] +" ");

}

begin = 0; end = n; //ліва і права границі масиву

while (begin < end)

{

// власне реалізація алгоритму

c = begin + (end - begin) / 2;

if (key < mas[c]) end = c;

else if (key > mas[c]) begin = c + 1;

else { x = true; break; }

}

if (x == true)

Console.WriteLine("Елемент знайдено");

else Console.WriteLine("\nЕлемент не знайдено");

Console.ReadKey();

}

}

}

Не дивлячись на те, що код досить простий, в ньому є декілька пасток.

  • Що буде, якщо first і last окремо уміщаються в свій тип, а first+last — ні?

  • Чи працюватиме алгоритм на порожньому масиві (n=0)?

  • Чи здатний код знаходити відсутні значення? У деяких програмістів написаний «з аркуша» двійковий пошук в такій ситуації зациклюється — і вони цього не усвідомлюють, поки тестування не дасть помилку.

  • Інколи потрібно, аби, якщо x в ланцюжку існує в декількох екземплярах, знаходити не будь-який, а обов'язково перший (як варіант: останній; наступний за останнім). Дана версія коду в такій ситуації знаходить перший з рівних.

Практичні застосування методу двійкового пошуку різноманітні:

  • Широке поширення в інформатиці стосовно пошуку в структурах даних. Наприклад, пошук в масивах даних здійснюється по ключу, призначеному кожному з елементів масиву (у простому випадку сам елемент є ключем).

  • Також його застосовують як чисельний метод для знаходження наближених коренів рівнянь.

  • Метод використовується для знаходження екстремуму цільової функції і в цьому випадку є методом умовної одновимірної оптимізації.

Завдання і вправи

1. Знайти методом лінійного пошуку кількість вказаних цифр в масиві {1,2,5,3,7,5,1,3,4}

2. Знайти методом лінійного пошуку максимальний і мінімальний елементи в масиві {4,5,2,3,8,7,6,1}

3. Знайти методом двійкового пошуку потрібний елемент у масиві розміру 100.