Advertisement
karbaev

binsearch

Feb 29th, 2016
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.55 KB | None | 0 0
  1. #include <cstdlib>
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. int binary_search(int array[],int first,int last, int value);
  6.  
  7. int main() {
  8.  int list[10];
  9.  for (int k=0; k<11; k++)
  10.    list[k]=2*k+1;
  11.  cout<< "binary search results: "<< binary_search(list,1,21,11)<<endl;
  12.  return 0;
  13. }
  14.  
  15. int binary_search(int array[],int first,int last, int search_key){
  16.   int index;
  17.   if (first > last) index = -1;
  18.   else {
  19.    int mid = (first + last)/2;
  20.    if (search_key == array[mid]) index = mid;
  21.    else if (search_key < array[mid]) index = binary_search(array,first, mid-1, search_key);
  22.    else index = binary_search(array, mid+1, last, search_key);
  23.   }
  24.  return index;
  25. }
  26.  
  27. /*
  28. Распространенный алгоритм поиска в упорядоченных множествах. Наглядно представим, что мы ищем точку Y на графике F(x), который всегда неубывает (при всегда невозрастании смысл не изменится), пример такого графика моей кривой рукой снизу. Мы знаем, что эта точка расположена в отрезке [L; R]. Давайте возьмем среднюю точку
  29. M=(R+L) /2 и тогда возможно три случая :
  30. 1) F(M)=Y; Да это же прелестно, мы нашли Y прямо в серединке!
  31. 2) F(M)<Y; Что-то мы мало взяли, наверное Y правее
  32. 3) F(M)>Y; Слишком далеко, Y где-то левее
  33. Такие умозаключения мы можем делать по причине постоянного неубывания. А давайте тогда повторим все те же самые действия в той половине, где мы предполагаем найти Y.
  34. • если Y слева, то в [L, M];
  35. • если Y справа, то в [M, R];
  36. • если мы вдруг оказались в ситуации, когда левая граница отрезка совпала с правой, или заехала за нее, то алгоритм надо останавливать, Y мы не нашли.
  37. Наиболее удачный пример объяснения алгоритма бинарного поиска это игра в "Угадай число". Вы высказываете версию, а загадавший говорит больше загаданное число или меньше. Используя алгоритм бинарного поиска вы сможете отгадать загаданное число максимум за Log (R-L), где L,R - диапазон возможных значений. То есть для чисел от 1 до 1000 вам понадобится не больше 10 вопросов.
  38. В программировании удачно применяется для поиска элементов в отсортированном массиве или для нахождения решения в какой-нибудь постоянно себя ведущей функции.
  39. Самое частое употребление - поиск элемента в отсортированном массиве. Заострю внимание на обязательной отсортированности массива, только в этом случае он ведет себя как монотонная функция, а аргументов является индекс в массиве.
  40. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement