Двоичный поиск

Слайд 2

Угадай число

Загадано число от 1 до 100, используя подсказки больше-меньше угадайте число.

За

Угадай число Загадано число от 1 до 100, используя подсказки больше-меньше угадайте
какое число попыток можно гарантированно угадать число?

Слайд 3

Угадай число

За какое число попыток можно гарантированно угадать число из интервала от

Угадай число За какое число попыток можно гарантированно угадать число из интервала от 1 до 100?
1 до 100?

Слайд 4

Угадай число

За какое число попыток можно гарантированно угадать число из интервала?

Угадай число За какое число попыток можно гарантированно угадать число из интервала?

Слайд 5

Двоичный (бинарный) поиск

метод деления пополам - самый быстрый поиск по упорядоченному набору

Двоичный (бинарный) поиск метод деления пополам - самый быстрый поиск по упорядоченному
данных

Задать левую границу поиска
Задать правую границу поиска
Найти середину интервала
Сравнить середину с искомым значением
Перейти в левую или правую часть в зависимости от результата сравнения
Повторить с первого пункта

Слайд 6

Двоичный поиск

Заданы номера выигрышных лотерейных билетов. Определить является ваш билет выигравшим 50?

Двоичный поиск Заданы номера выигрышных лотерейных билетов. Определить является ваш билет выигравшим 50?

Слайд 7

Двоичный поиск

l=0; r=n;
while (l{
m=(l+r)/2;
if (a[m] else r=m;
}
if (a[l]==k) // найден
else //

Двоичный поиск l=0; r=n; while (l { m=(l+r)/2; if (a[m] else r=m;
не найден

Слайд 8

Двоичный поиск (с поддержкой инварианта)

l=0; r=n; // полуинтервал [0; n)
инвариант
while (l+1{
m=(l+r)/2;
if (a[m]<=k) l=m; //

Двоичный поиск (с поддержкой инварианта) l=0; r=n; // полуинтервал [0; n) инвариант
инвариант [ ; )
else r=m;
}
if (a[l]==k) // найден // инвариант [ ; )
else // не найден

Слайд 9

Двоичный поиск (с повторяющимися элементами)

l=0; r=n;
while (l+1{
m=(l+r)/2;
if (a[m]<=k) l=m;
else r=m;
}
if (a[l]==k) //

Двоичный поиск (с повторяющимися элементами) l=0; r=n; while (l+1 { m=(l+r)/2; if
найден
else // не найден

1 1 1 3 3 3 5 5 5 7 7 8 8 8

находит самое правое вхождение