Алгоритм бинарного/двоичного поиска. (Binary search algorithm)

Поделиться
HTML-код
  • Опубликовано: 6 янв 2025

Комментарии • 81

  • @Neboyarsky
    @Neboyarsky 5 лет назад +11

    наконец-то простое и понятное объяснение реализации алгоритма, спасибо автору

  • @БуратиноКлючик
    @БуратиноКлючик 5 лет назад +16

    Есть реализация попроще:
    Пусть l - левая граница, r - правая, m - середина, x - искомое число:
    while(r-l>1){
    m = (l+r)/2;
    m>=x? r = m : l = m;
    }
    cout

  • @ОлександрШульга
    @ОлександрШульга 4 года назад +3

    Это било реально круто. Мне уже разказавали бинарний поиск , но я не знал даже что такое массив. Я вроде понял , но очень плохо(тогда). Первую функцию я понял сразу(потому что я её видел уже). С грубой силой тупил и пересмотрел и понял. Посмотря дважды видео , я очень рад , что я понял. Спасибо.

  • @kushvad998
    @kushvad998 Год назад +2

    В строке "int mid = (low + high) / 2;" правильнее писать "int mid = low + (high - low) / 2;". Поскольку при огромном количестве элементов в массиве numbers возможно переполнение индекса mid.

  • @icaruspadlus7970
    @icaruspadlus7970 7 лет назад +4

    молодец...и речь приятная, слушать легко.

  • @vadimf8301
    @vadimf8301 7 лет назад +2

    прикольный пример использования алгоритма

  • @АлександрТ-б3б
    @АлександрТ-б3б 8 лет назад +3

    Спасибо, очень познавательно.

  • @wepko
    @wepko 6 лет назад +1

    Да круто,я его как рас спомнил и тут ты пронего рассказываешь cs50,
    класс

  • @СаняСаня-ш8ф
    @СаняСаня-ш8ф 7 лет назад

    Спасибо за контент, с меня лайк и коммент. Удачи !

  • @Fovaxus
    @Fovaxus 6 лет назад

    Видео - ТОП! Спасибо огромное!

  • @misana77
    @misana77 6 лет назад +18

    Передавать вектор по значению, а не по константной ссылке - это пиздец)

  • @Postoronnim_B
    @Postoronnim_B 2 года назад

    А если сложить время/итерации затраченные на сортировку массива из 1 000 000 миллиона строк и бинарный поиск в нем, выигрыш все еще остается?

  • @matrix-u1n
    @matrix-u1n 5 лет назад

    кстати, а если нужно найти минимальные значения массивов и потом количество минимальных элементов, как тогда быть?Это надо сначала найти минимальный элемент, без помощи бинарного поиска, а уже потом искать их количество с помощью бинарного поиска, или можно просто в бинарном поиске найти минимальный элемент, и там же его количество в массиве? прошу очень важно

  • @uncle-xxi
    @uncle-xxi 7 лет назад +38

    Немаловажный нюанс - бинарный поиск будет работать только на отсортированных/поиндексированных данных...

    • @zhoorba
      @zhoorba 7 лет назад +10

      5:52

    • @Fovaxus
      @Fovaxus 6 лет назад

      Об этом говорилось в видео

    • @_l.e.n.y_4956
      @_l.e.n.y_4956 3 года назад

      Не обязательно. Список может быть не отсортированый, но походу добавления в список новых значений надо сортировать

  • @ymnik100
    @ymnik100 7 лет назад +15

    epicilon:)

  • @АлексейМосолов-ю3л

    Так а хдежишь описание линейного пути? Говорил выбирать его и не прогадаем :'(

  • @mdreal3264
    @mdreal3264 5 лет назад

    Да ждал когда ты закончешь. :-)

  • @nikitafrolov7668
    @nikitafrolov7668 7 лет назад

    На сколько итераций алгоритм Ньютона для вычисления кк. был бы тут эффективнее/не эффективнее?

    • @DiamondSane
      @DiamondSane 7 лет назад +2

      Асимптотические сложности этих методов разные, метод бинарного поиска дал бы линейную сходимость(см вики) здесь, тк. на каждой итерации мы находим по сути ещё один значащий бит квадратного корня в двоичном представлении. Скорость сходимости в методе Ньютона зависит от величины шага в разностном приближении производной, если мы вычисляем её значение по разностной схеме. Так можно получить более быструю сходимость в смысле количества итераций, но здесь не учитывается разности во времени для выполнения одной итерации. Если мы берём аналитический вид, производной интересной нам функции, то можно ещё ускорить сходимость, вплоть до квадратичной, но проблема с ними в том, что возможна расходимость, при неудачном выборе начального приближения.
      На практике даже если мы возьмем четверную точность, в котором на мантиссу отведено 112 бит, то метод двоичного поиска даст нам максимально точный ответ где-то за 112 с небольшим(потому что нужно знать ещё и порядок числа) итераций, но вообще копать этот вопрос можно до бесконечности.
      Это всё применительно к данному уравнению. Ни метод Ньютона, ни метод дихотомии не гарантируют нахождения нулей для произвольных функций.

  • @qwerty89993
    @qwerty89993 Год назад

    спасибо!

  • @venci6245
    @venci6245 5 лет назад

    Привет Win, а если вектор будет из 9 значений, то mid будет равен 4.5. Затем ты эти 4.5 передашь в индекс, то что будет тогда ?

    • @dm3y434
      @dm3y434 5 лет назад +1

      Значение интовское, и округлится до 4

  • @dastanomirgali2296
    @dastanomirgali2296 8 лет назад

    Привет бородач еще раз спасибо за то что ты делаешь. хотел спросить можно ли тебе задавать профессиональные вопросы и советоваться (не буду занозой) в коментах или где то еще?))))

  • @anritverskoi4854
    @anritverskoi4854 5 лет назад +1

    Было бы здорово если бы вы выложили код программ для детального анализа....я чайник еще

  • @KKHProduction
    @KKHProduction 8 лет назад

    Когда ты говорил про линейный поиск, ты говорил про какой-то Эписилон, ты имел ввиду Эпсилон? en.wikipedia.org/wiki/Epsilon

    • @wndtn
      @wndtn  8 лет назад +1

      Это долго объяснять, почему я Эпсилон называю "Эписилон", но да, я имел ввиду этот символ.

    • @АлексейМосолов-ю3л
      @АлексейМосолов-ю3л 5 лет назад

      @@wndtn расскажешь? Немного жизнености преподавателя мотивирует учеников)

  • @SochiGreen
    @SochiGreen 8 лет назад

    Спасибо за видео. Было бы круто прикреплять код из видео в описании под ним.

    • @wndtn
      @wndtn  8 лет назад +2

      Я обычно так и делаю. Эти исходники тоже прикреплю.

  • @Al-Mas3000
    @Al-Mas3000 5 лет назад

    Получается бинарный поиск работает только в упорядоченных массивах?

    • @PurpleDaemon_
      @PurpleDaemon_ 5 лет назад

      Да, соответственно не понимаю как это связано с поиском слова в книге.

    • @SerhiiSokolov-p4w
      @SerhiiSokolov-p4w 4 года назад

      @@PurpleDaemon_ речь о телефонном справочнике..

  • @oxotAzapivom
    @oxotAzapivom 7 лет назад +2

    epicilion - это пасхалка либо новая мода?

    • @bespelotnik1950
      @bespelotnik1950 7 лет назад +3

      это буква греческого алфавита (только произносится она "эпсилон", не "эписилон")

  • @ivankupnevskij4370
    @ivankupnevskij4370 4 года назад

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

  • @stakemograine266
    @stakemograine266 6 лет назад +6

    if (pow(ans, 2) == ans*ans) cout

  • @robertnewman8824
    @robertnewman8824 Год назад

    Пожалуйста погромче звук записывайте

  • @Dmitrii-Zhinzhilov
    @Dmitrii-Zhinzhilov 5 лет назад

    спасибо

  • @АнтонНиколаев-ь1с
    @АнтонНиколаев-ь1с 5 лет назад

    Ссылку бы

  • @evan_ry
    @evan_ry 8 лет назад

    Какой микрофон используешь?

    • @wndtn
      @wndtn  8 лет назад

      audio technica at2020

    • @evan_ry
      @evan_ry 8 лет назад

      Благодарю

    • @tagil1234567
      @tagil1234567 8 лет назад

      +Winderton есть ли в планах видео о работе с OGL, SDL и прочим?

    • @wndtn
      @wndtn  8 лет назад

      SDL, GLFW будут. Вторая, точно будет. Я на ее основе буду движок делать, а c помощью SDL на С игру напишем.

  • @СаняМусский-ц4ы
    @СаняМусский-ц4ы 7 лет назад

    К сожалению, я не понял смысл в цикле, в нахождении корня грубой силой.

    • @Wi1dLife
      @Wi1dLife 7 лет назад +2

      он перебирает числа с определённым шагом, возводит их в квадрат и сравнивает с а

    • @cybelash5231
      @cybelash5231 6 лет назад +2

      Смысл в том, чтобы показать, как много итераций требуется для нахождения корня таким лобовым методом и что это не оправдано. Ну и чтобы показать, насколько эффективен по сравнению с лобовым алгоритм дихотомии (бинарного поиска).

  • @KybaLioN66
    @KybaLioN66 8 лет назад

    thank you

  • @Mishail04
    @Mishail04 6 лет назад +2

    Бинарный квадратный корень для a

    • @funnyh0rr0r31
      @funnyh0rr0r31 6 лет назад

      Разве добавление условия а ля if 0

    • @cybelash5231
      @cybelash5231 6 лет назад +1

      Будет! Только нужно применять метод не напрямую к a

  • @necolas104
    @necolas104 6 лет назад

    Почему у тебя в бинарном поиске в 26 строке high = mid-1, на вики и в других источниках в этом месте high=mid. Насколько я понял, позапускав код, это приводит к лишней итерации. Поправь если не прав

    • @cybelash5231
      @cybelash5231 6 лет назад

      Да, ты прав. Если ты положишь high = mid, то будешь лишний раз проверять условие для mid, хотя оно и проверено уже.

  • @ИНФОРМАЦИЯДЛЯУСПЕШНЫХ

    Спсб

  • @Starponyx
    @Starponyx 7 лет назад +2

    Это второй курс универа. Один из смыслов получить вышку.

    • @freedomtv2295
      @freedomtv2295 6 лет назад +2

      Паша Захаров это уровень сложности девятый класс в школе .
      В универе на втором курсе будете уже ООП во всю заниматься)

    • @kayman3415
      @kayman3415 6 лет назад +1

      @@freedomtv2295 Я как ученик 9 класса, заявляю, то что это не правда )))Мы на Pascal'e ещё функции и массивы не начали проходить ))

    • @Nickell.
      @Nickell. 6 лет назад

      Занимался ООП во всю на третьем курсе колледжа, полность согласен, то что в видео - уровень 9-11 класса.
      Только вот они там это проходить не будут, там это не надо.

  • @cabling1205
    @cabling1205 2 года назад

    вычисляя корень из 100 получаю 9.999... эх

  • @xelaksal6690
    @xelaksal6690 7 лет назад

    Гууд

  • @cppprograms5868
    @cppprograms5868 4 года назад

    С++

  • @bakytbektashov4488
    @bakytbektashov4488 7 лет назад

    какой язык программирования

  • @hydrock9738
    @hydrock9738 6 лет назад +2

    Странный пример с книгой и именем

  • @i.am.rossalex
    @i.am.rossalex 7 лет назад +1

    Это матиматика, "метод половинного деления"

    • @cybelash5231
      @cybelash5231 6 лет назад +3

      Хоть горшком назови

  • @lisafox9026
    @lisafox9026 5 лет назад +1

    Ну на черной теме так плохо видно на маленьком ноутбуке, неужели вы не просматриваете свое видео? на работе не могу во весь экран смотреть, а на маленьком не видно, поэтому дизлайк.

  • @johnashley5960
    @johnashley5960 5 лет назад

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

    • @johnashley5960
      @johnashley5960 5 лет назад

      template // вектор сука разный может быть, с разным аллокатором, например
      T *binary(const V &n, T x) { // вектор по ссылке сука
      size_t first, last, mid;
      first = 0;
      last = n.size(); //никаких ноль минус один сука, никаких интежер оверфлоу
      while (first < last) {
      mid = first + (last-first)/2; // никаких сука я сказал
      if (x < n[mid]) {
      last = mid;
      } else if (x > n[mid]) {
      first = mid + 1;
      } else {
      return const_cast(&n[mid]); // и возвращаем блять указатель, а не найдено/не найдено
      }
      }
      return nullptr;
      }
      и не надо ебаться с итераторами у контейнера, они в данном случае замедляют поиск
      выкладываю, потому что полно ебанутых реализаций (таких как твоя) и заебало ловить сегфолты в говноприложениях

    • @johnashley5960
      @johnashley5960 5 лет назад

      и нахуя оно выдаёт true или false? можно тот же стл использовать для этого. алгоритм выше для того, что бы обойти ограничение, вызванное предикатом, в функции lower_bound