Лучший алгоритм поиска // Vital Math

แชร์
ฝัง
  • เผยแพร่เมื่อ 12 พ.ค. 2024
  • Получи грант на обучение в Центральном университете - l.tinkoff.ru/vitalmathcuapr?e...
    Бинарный поиск - простой, но мощный алгоритм поиска в упорядоченном массиве. Но несмотря на свою простоту, всего 10% программистов смогут написать его без ошибок. Как же работает алгоритм? В чем его сложность? Где он применяется? И чем очень полезен в повседневной жизни? #vitalmath
    Почта для ваших программ: vital.mathbox@gmail.com
    00:00 Вступление
    01:37 Центральный университет
    04:08 Бинарный поиск
    08:51 Мощь и красота
    12:41 Ошибки в деталях
    15:57 Приложения
    17:03 Три вывода
    Полезные книги:
    Д. Кнут. Сортировка и поиск

ความคิดเห็น • 236

  • @alexandertelegin8325
    @alexandertelegin8325 23 วันที่ผ่านมา +88

    А теперь давайте разберёмся с такой "мелочью" как сортировка 😏

    • @sergc9068
      @sergc9068 11 วันที่ผ่านมา +1

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

    • @Votruh
      @Votruh 11 วันที่ผ่านมา

      @@sergc9068 во, во, я тоже ждал и думал, что вся красота бинарного поиска меркнет перед изначальным отсутствием сортировки ))

    • @Tephodon
      @Tephodon 10 วันที่ผ่านมา

      @@sergc9068 Пусть лучше расскажет про R-деревья и Z-порядок.

    • @argonpraim8974
      @argonpraim8974 10 วันที่ผ่านมา

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

  • @Kriorem
    @Kriorem 23 วันที่ผ่านมา +110

    лучший вид поиска это удалить половину,а потом всё остальное

    • @VL1507
      @VL1507 23 วันที่ผ่านมา +22

      После слов "сортировка" и "удалить" вспомнил Stalin sort

    • @myusernamex
      @myusernamex 23 วันที่ผ่านมา

      @@VL1507сххахахахахах, шаришь

    • @Noobish_Monk
      @Noobish_Monk 20 วันที่ผ่านมา

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

    • @user-hj9ly9sn4o
      @user-hj9ly9sn4o 18 วันที่ผ่านมา

      Не сортировки, а поиска в отсортированном массиве. А алгоритмов сортировки куча разных.

  • @katakanashalapaev169
    @katakanashalapaev169 22 วันที่ผ่านมา +46

    Бинарный поиск был крайне популярен в стародавние воемена, когда гирлянды делали из большого количества последовательно включённых лампочек. Рано или поздно происходила потеря контакта или сгорала лампочка. Вот и делили пополам, потом прозванивали произвольно выбранную часть. Каждая итерация позволяла очень быстро найти неисправность. Дошёл до этого своими мозгами еще в детстве.

    • @f.linezkij
      @f.linezkij 22 วันที่ผ่านมา

      А как можно прозвонить произвольно заданную часть цепи, не вырезая её из всей гирлянды?

    • @Slavasil
      @Slavasil 21 วันที่ผ่านมา

      @@f.linezkij запросто, главное чтобы остальная цепь была разомкнута

    • @kuch4
      @kuch4 21 วันที่ผ่านมา

      Это еще древние люди придумали. Древние люди по 20 лет жили. Все в детсве придумывали, все гениальное просто.

  • @Alemorf
    @Alemorf 23 วันที่ผ่านมา +35

    Я как программист скажу, что не все так однозначно. ) Двоичный поиск обычно работает с массивами. Т.е. все значения расположены в памяти подряд. Добавление нового элемента в такой массив это дорогая и долгая операция. Если нужно не только искать, но и часто изменять данные, то программисты используют красно-черное дерево или b+ дерево. Причем, алгоритм красно-черного дерева напишут без подсказки меньше 1% программистов. Потому что мало кто задумывался, как оно вообще работает. Это прямо магия какая то.

    • @user-pg8ry1tm3t
      @user-pg8ry1tm3t 23 วันที่ผ่านมา +1

      Ну какая ж магия… деревья - структуры как раз использующие встроенный логарифм прохода для ускорения вставки поиска etc… в различных видах типа самобалансир и тд… поправьте ежели шо🥴

    • @Alemorf
      @Alemorf 23 วันที่ผ่านมา

      @@user-pg8ry1tm3t магия, в том, что при добавлении новых значений в любое место дерева, длинна всех ветвей остается одинаковой. Это балансировка дерева, алгоритм которой мало кто объяснит. Помнят только, что какие то узлы красные, а какие то чёрные.

    • @user-pg8ry1tm3t
      @user-pg8ry1tm3t 23 วันที่ผ่านมา

      @@Alemorfда и это не магия, это правило построения дерева. Просто учёный, разработавший алгоритм именно кчд, просчитал каким образом отбалансировать дерево… 72й год кажся…

    • @Alemorf
      @Alemorf 23 วันที่ผ่านมา +3

      @@user-pg8ry1tm3t ничего то вы в магии не понимаете.

    • @user-pg8ry1tm3t
      @user-pg8ry1tm3t 23 วันที่ผ่านมา

      @@Alemorf😂

  • @user-eb3lz3ox8u
    @user-eb3lz3ox8u 19 วันที่ผ่านมา +8

    5:50 ролик начинается отсюда

  • @boulderrush5233
    @boulderrush5233 23 วันที่ผ่านมา +13

    Было бы неплохо так ясно и понятно (этого не отнять) послушать по "магию" помехоустойчивого кодирования - коды Рида-Соломона. Отличный стык математики и IT и тоже классика еще из 60х. Но это чуть посложнее чем "детишки, просто делите все пополам"

  • @PsevdoAI
    @PsevdoAI 23 วันที่ผ่านมา +13

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

    • @alex-vl7ls
      @alex-vl7ls 23 วันที่ผ่านมา +4

      Всмысле не изобрели? Быструю сортировку взять хотя бы

    • @PsevdoAI
      @PsevdoAI 23 วันที่ผ่านมา

      @@alex-vl7ls Быстрая сортировка использует рекурсию и требует большого объема оперативной памяти, из-за чего её, например, невозможно применить на микроконтроллере, с 1кб ОЗУ.

    • @alex-vl7ls
      @alex-vl7ls 23 วันที่ผ่านมา +4

      @@PsevdoAI Ее можно реализовать нерекурсивно. Но вы правы, она действительно требует дополнительную память. Но, допустим на таком микроконтроллере, невозможно записать большой массив, на котором выигрыш от быстрой сортировки в скорости был бы значим (килобайт ОЗУ это 8192 бита, или же всего 256 int'ов), а значит можно взять условный пузырек (или сортировку Шелла, она не требует дополнительной памяти и у нее лучше асимптотика)

    • @Dmitriy-rc5bi
      @Dmitriy-rc5bi 23 วันที่ผ่านมา +9

      В том-то и дело, что вся сила и магия этого алгоритма мгновенно меркнет, как только становится известно, что весь массив должен быть отсортирован))

    • @alex-vl7ls
      @alex-vl7ls 23 วันที่ผ่านมา +6

      @@Dmitriy-rc5bi Все алгоритмы по своему магические, но они разработаны для решения конкретных задач и вне не имеют смысла. Например, нет никакого смысла 5ти значные числа перемножать алгоритмом Карацубы (или любым другим "продвинутым" алгоритмом умножения). Это все равно что винить самолет в том, что ему нужна взлетная полоса

  • @yuralamov9835
    @yuralamov9835 19 วันที่ผ่านมา +2

    С малолетства засиживался в библиотеках и поражался, как библиотекари ищут книгу. У одних сортировка по авторам, у других по названию, по жанру и тд. Потом узнал, что на каждую книгу десятка два карточек по критерию книги. Отсюда вывод - если есть возможность массив сортируй по мере наполнения, чтобы не было мучительно больно.

  • @krotov_play
    @krotov_play 23 วันที่ผ่านมา +14

    Программисты нажали F, чтобы отдать честь

  • @RosSpirtProm
    @RosSpirtProm 23 วันที่ผ่านมา +3

    Отличный ролик! Может, стоит задуматься о серии роликов про интересные алгоритмы?

  • @CHRNBRY
    @CHRNBRY 23 วันที่ผ่านมา +8

    Ура, видео, в котором я хоть что-то понимаю

  • @user-ev9bp9rf9k
    @user-ev9bp9rf9k 15 วันที่ผ่านมา

    Всегда рад видеть твоё видео!

  • @denisbaranoff
    @denisbaranoff 23 วันที่ผ่านมา +1

    Спасибо Вам за ролик

  • @userasus4702
    @userasus4702 22 วันที่ผ่านมา +6

    Бинарный поиск в инженерии: при поломке, делим цепь на 2, проверяем работоспособность, продолжаем пока не найдем неисправный узел

    • @USER-ruzer2000
      @USER-ruzer2000 19 วันที่ผ่านมา +1

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

  • @Hero-bx7fy
    @Hero-bx7fy 23 วันที่ผ่านมา +7

    Спасибо, бро. может втолкуешь еще как работает алгоритм блюма?

  • @ramisvakazov8757
    @ramisvakazov8757 15 วันที่ผ่านมา

    Любимая рубрика! Всегда эти видео оставляю на утро выходного дня, когда можно расслабленно посмотреть под чаек )

  • @coderash_project
    @coderash_project 23 วันที่ผ่านมา +3

    Виталий, -> 8:20 : у тебя ошибка в 8 строчке кода (array не определена, не забываем про регистр ;-) )

  • @CHRNBRY
    @CHRNBRY 23 วันที่ผ่านมา +11

    Поиск, это, конечно, хорошо, но как на счёт сортировки самих массивов перед этим?)

    • @user-qc7jc3pz3b
      @user-qc7jc3pz3b 23 วันที่ผ่านมา

      Один хрен, надо выбрать алгоритм индексации неиндексированного массива.

    • @f.linezkij
      @f.linezkij 21 วันที่ผ่านมา

      heapSort, quickSort и mergeSort за время O(n log n) к вашим услугам. В случае ограниченного диапозона значений bucketSort и вовсе за линейное время))

    • @user-wb4uh8nx8p
      @user-wb4uh8nx8p 20 วันที่ผ่านมา

      Быстрая сортировка Хоара, по сути, модификация метода бинарного поиска. А быстрое преобразование Фурье, благодаря которому работает сжатие картинок/видео/звука - это модифицированная быстрая сортировка.

    • @foxcat_
      @foxcat_ 12 วันที่ผ่านมา +1

      Если тебе надо найти элемент много раз, то от 1 сортировки погода не испортится
      Если надо один раз найти элемент, то линия, конечно, выигрывает

  • @TheTurin2002
    @TheTurin2002 22 วันที่ผ่านมา +2

    А чем подобный "бинарный поиск" отличается от метода последовательного приближения применяемого в АЦП, где как такового упорядочивания исходных данных нет (вернее исходные данные не извести и/или могут быть изменяемые со временем)?

    • @postoronny
      @postoronny 20 วันที่ผ่านมา

      Там тоже видно, больше ли текущее значение уровня сигнала.

  • @SergeyDegtyarchuk
    @SergeyDegtyarchuk 23 วันที่ผ่านมา +3

    оказывается метод Коши программисты называют бинарным поиском! ))

  • @user-tk2jy8xr8b
    @user-tk2jy8xr8b 23 วันที่ผ่านมา +1

    Обычно в программировании используют именно хэш-таблицы за счёт поиска за O(1) и добавления элемента за амортизированное O(1). Если только не нужно выполнить нестрогий поиск слева/справа или не используются иммутабельные структуры данных.

  • @Poker-s_S.V.
    @Poker-s_S.V. 23 วันที่ผ่านมา +5

    держи, может придется где то + или -1 поставить, а может и нет....)))
    не оптимизировано типа i++ и тд для понимания, да и компилятор оптимизирует сам, главное писать понятно...)))
    ===================================================================
    xx = искомое значение.
    dd = length(mas); //начальная длина массива.
    ===================================================================
    // для ориентации // int bg =0; //начало массива.
    // для ориентации // int en = dd; //конец массива.
    int sm = 0; //смещение в массиве.
    while (zz != xx ) //выполнять до тех пор пока не равенство.
    {
    ii = dd div 2; //половина целое, край.

    zz = mas[ ii + sm ] ;//беру крайнее значение у первой половины.
    sm=ii+sm; if (sm == 1) {
    std::cout

    • @Poker-s_S.V.
      @Poker-s_S.V. 21 วันที่ผ่านมา

      тут с очень серьезными ошибками, но! кому надо обращайся покажу рабочий вариант.

  • @hrzn
    @hrzn 20 วันที่ผ่านมา

    Недавно решил разобраться с этим алгоритмом, я поражен его эффективностью. Спасибо за столь познавательный ролик!

  • @MyOwnShadowEclipse
    @MyOwnShadowEclipse 23 วันที่ผ่านมา +5

    Еще не досмотрел. 0:45. Понятно, что это пример, но в случае с книгами я бы предпочел алгоритм, который выбирал бы полки с краю, если книга, например, начинается на А.
    Как мы обычно ищем слово в словаре? Мы хотим найти слово на букву И (10-я), например. Мы понимаем, что это ближе к началу и открываем примерно в первой трети словаря. Пусть там К (12-я). Значит И левее, но не намного. Примерно 0,8. Переходим туда и видим Е. Значит И где-то посередине. Делим оставшиеся страницы пополам и попадаем на И.
    По-моему, это даже какой-то реальный алгоритм с названием, но не помню точно, как называется. Если найду, отпишу
    UPDATE: похоже на интерполяционный поиск

    • @LinarOPS
      @LinarOPS 23 วันที่ผ่านมา +5

      Имеет место быть! Но тут наверное зависит от условий задачи. Вдруг у нас 100 книг на букву А и по одной книге на все остальные буквы алфавита

    • @notyuki256
      @notyuki256 23 วันที่ผ่านมา +2

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

    • @Khristophorov
      @Khristophorov 23 วันที่ผ่านมา +2

      Всё зависит от ситуации. Ты попадёшь в просак, если все книги в твоей библиотеке начинаются на А. Либо, когда у тебя уже есть поднабор, но там большинство букв по этом индексу одинаково.
      Пример: Ты ищешь слово "Рация" и у тебя уже есть твой поднабор на букву "Р". Т. к. после "Р" идёт "а", то логично искать в начале. Но на "Ра" огромнейшее число слов, та же приставка "рас" уже нехило смещает положение: "расстояние", "расположение", "рассада" и т. д. Т. е. в словаре, слово "Рация" должно быть где-то между четвертью и половиной, но никак не в начале набора слов начинающихся с "Р".
      В-общем, если есть какие-то данные о наборе для поиска и их можно применить в алгоритме, - это, конечно, делается. Да, он будет более специфичен, но и более быстр для конкретного типа задач.

    • @roy.betty.replicantnexus-6871
      @roy.betty.replicantnexus-6871 23 วันที่ผ่านมา +2

      Это работает только для равномерных распределений по мощности элементов. А алгоритмическая сложность считается по худшему варианту. У вас и в словаре буквы не равнозначны (больше всего слов на букву П, меньше всего - на Й). Вообще лучшего поиска быть не может - всё зависит от данных. Современные БД очень наглядно это реализуют - когда вы добавляете данные, в тот же самый момент собирается/обновляется аналитика и статистика по распределениям ключей, и это позволяет выбрать и оптимальную логику сохранения (не всегда упорядочивание при вставке выгодно), и при запросе на поиск выбрать самый оптимальный данным алгоритм.

    • @Khristophorov
      @Khristophorov 23 วันที่ผ่านมา +1

      Добавлю ещё что есть чуть отличающийся алгоритм - быстрого поиска. Он лежит в основе быстрой сортировки Хоара. Там вместо деления пополам берётся просто индекс на бум. Т. е. есть массив из, например, 10 элементов. Мы берём Math.random(1, 10) -> 7. Если 7й элемент больше нашего, то будем искать между (8, 10), если меньше, то (1, 6), если равен, то нам повезло)

  • @user-xi1yy4gt1u
    @user-xi1yy4gt1u 23 วันที่ผ่านมา +1

    У бинарного поиска один огромный минус - требуется предварительная сортировка массива. Редко исходный массив остается неизменным. Значит после каждого изменения требуется сортировка, а это очень наклАдная операция.

  • @user-yk5mc4gc8t
    @user-yk5mc4gc8t 20 วันที่ผ่านมา

    Хотелось бы ещё видео про R-деревья и поиск среди пространственных данных.

  • @black_sea99
    @black_sea99 14 วันที่ผ่านมา +1

    Метод половинного деления, неосознанно применялся еще в школе, особенно когда пошли толстые учебники.
    И на слова учителя " открываем учебник на 68 странице", что-то не припомню, что бы листали подряд страницы. Тупо делили пополам, пополам и т.д.

  • @musicits_fun
    @musicits_fun 21 วันที่ผ่านมา

    Когда то давно я изобрел этот метод. Но потом оказалось, что кто-то уже давно изобрел его до меня. 😅😢😂 сейчас у меня есть изобретение в области ии, которое позволит ии понимать динамические образы, надеюсь хоть тут успею быть первым😊

  • @bambu4ina434
    @bambu4ina434 23 วันที่ผ่านมา +2

    8:04 в python на строки делить не принято ;)
    комментарии там через решетку

  • @user-hg9hk3eo9h
    @user-hg9hk3eo9h 7 วันที่ผ่านมา

    Интересно, а в Пайтоне есть поиск для неоднородного массива, заполненного неотсортированными данными? В Julia например есть!

  • @femalesworld2
    @femalesworld2 23 วันที่ผ่านมา +36

    .бинарный поиск, анекдот:
    Начальник принес стопку анкет помощнику, чтоб он выбрал 10 кандидатов. Ушёл. Пришёл через час, помощник ещё возится с анкетами. Говорит, давай, я сам. Большую часть анкет убрал в сторону, не глядя, из оставшихся 15 выбрал 10 анкет. Помощник спросил, а как же стопка анкет, просмотреть, выбрать лучших. Начальник ответил, зачем нам неудачники...
    😂😢

    • @user-jr2nz3ux8u
      @user-jr2nz3ux8u 22 วันที่ผ่านมา +1

      😂

    • @kuch4
      @kuch4 21 วันที่ผ่านมา +1

      Жестокая правда

    • @sergc9068
      @sergc9068 11 วันที่ผ่านมา +1

      В нормальном варианте анекдота: "большую часть стопки выбросил в мусорную корзину".

  • @suuron
    @suuron 22 วันที่ผ่านมา

    По-моему, самый простой способ написать бп - это использовать полуинтервалы, то есть:
    Индексы элементов массива это числа от 0 до n-1(n - длина массива, пусть l=0 - указатель на начало, r=n - указатель на конец(не включает последний элемент массива), если r - l == 1, то такой полуинтервал включает в себя один элемент - искомый(если он есть в массиве)
    while r > l + 1:
    m = (r + l) / 2
    if array[m] > value:
    r = m
    else:
    l = m
    if array[l] == value:
    return l
    else:
    return -1
    Никаких +-1, и проверка на равенство необязательна

  • @user-ev9bp9rf9k
    @user-ev9bp9rf9k 15 วันที่ผ่านมา

    Ура, я так рад что у тебя реклама появилась )

  • @mmx969
    @mmx969 15 วันที่ผ่านมา

    в АЦП последовательного приближения тоже используется алгоритм бинарного поиска

  • @canniballissimo
    @canniballissimo 23 วันที่ผ่านมา

    мой любимый алгоритм

  • @vyacheslavs5642
    @vyacheslavs5642 10 วันที่ผ่านมา

    Всего-то осталось предварительно отсортировать массив. И можно применять бинарный поиск ))

  • @tuskbrown4826
    @tuskbrown4826 22 วันที่ผ่านมา +2

    37 не случайно?

  • @myse404
    @myse404 22 วันที่ผ่านมา

    8:35 а как код себя поведет, если объектов в массиве нечетное число? Середина будет дробной, ее же надо к int приводить, тогда как раз серединой станет меньший элемент

    • @MrDerReiter
      @MrDerReiter 22 วันที่ผ่านมา

      А смысл? Дробная часть итак будет отброшена при делении int на int, сработает неявное приведение. Явное приведение нужно как раз в обратном случае, когда мы НЕ хотим терять дробную часть; тогда приводим делимое или делитель к double/float. Но не в этом случае, мы ведь с индексом работаем, а он должен полюбому оставаться целым числом; иначе просто код не скомпилируется (на C# или Java, например; а Пайтон просто в рантайме сам сделает обратное приведение). YAGNI если короче)

  • @user-cp3vc4ho9g
    @user-cp3vc4ho9g 23 วันที่ผ่านมา +1

    8:25
    А если искомое число -1 , то при выводе -1 мы какой вывод должны сделать: что ответ -1 ,или что искомого числа нет?😂

    • @user-cz9ub6iw6w
      @user-cz9ub6iw6w 23 วันที่ผ่านมา +1

      Если такое число в массиве есть, то вернеся индекс элемента, если нет, то вернется -1

  • @Tephodon
    @Tephodon 22 วันที่ผ่านมา +1

    Помню, в детстве писал на ассемблере код для функций умножения и деления целых чисел. Умножение реализовал как цикл суммирования. Деление - как поиск значения обратной функции от умножения, как раз методом дихотомии...

    • @USER-ruzer2000
      @USER-ruzer2000 19 วันที่ผ่านมา +1

      В ассемблере здорво сдвигом вправо делить на 2, на 4, на 8, на 16

    • @Tephodon
      @Tephodon 19 วันที่ผ่านมา

      @@USER-ruzer2000 Да, сложил два числа и сдвинул - вот тебе и среднее!

    • @sergc9068
      @sergc9068 11 วันที่ผ่านมา

      А что, деление и умножение в столбик не объясняли в школе?
      В двоичной системе счисления как и в любой другой работает одинаково.
      выровнял делитель по делимому по старшему биту если делитель меньше делимого или равен, на один разряд дальше вниз если больше, и отнимаешь.
      Умножение так же только выравнивать нужно по младшему разряду. конечно там есть пару оптимизаций простеньких, но в целом процессоры так и делают.

    • @Tephodon
      @Tephodon 10 วันที่ผ่านมา

      @@sergc9068 Потому-что цель была, как можно быстрее заполучить искомые функции, а не тратить время на создание более сложных алгоритмов. Быстродействие также было несущественно.

  • @user-rm4bc5to9y
    @user-rm4bc5to9y 23 วันที่ผ่านมา

    Можно было и про quick-sort упомянуть. Удивительно быстро сортирует массив, в котором потом ищем. Тоже делит пополам, правда там рекурсия а это чуть посложнее для понимания

    • @suuron
      @suuron 22 วันที่ผ่านมา

      Это не quick-sort, а merge-sort

  • @user-iu9ou7vk2k
    @user-iu9ou7vk2k 15 วันที่ผ่านมา

    Только честно, вы 37 расположили на превью после видео Veritasium?

  • @user-pr-613
    @user-pr-613 22 วันที่ผ่านมา

    Прямой доступ по указателю ещё быстрее) )

  • @antizai.
    @antizai. 10 วันที่ผ่านมา

    А как быть если элемент не найден и ты хочешь получить не -1, а индекс элемента для вставки нового(т.е. ненайденого) элемента? Это помогло бы иметь всегда отсортированную последовательность.

    • @WantedWhiteTiger
      @WantedWhiteTiger 7 วันที่ผ่านมา

      Сохранять отдельно L и R - на входе в цикл это индексы

  • @yurishenderovich1118
    @yurishenderovich1118 6 วันที่ผ่านมา

    Это не комментарий , а вопрос. Если понимать натуральный ряд как последовательность чисел, в которой два соседних числа находятся на одинаковом расстоянии, то это расстояние может быть рациональным числом , иррациональным (для нечетных оснований) и даже трансцендентных чисел (например, точки , определяемые трансцендентной функцией синус)?

  • @Sergej_Dudov
    @Sergej_Dudov 22 วันที่ผ่านมา

    Обманчиво простая штука.

  • @user-ie3rx3gh9m
    @user-ie3rx3gh9m 23 วันที่ผ่านมา

    О! Вы еще и в проге разбираетесь))

  • @ingerpawus791
    @ingerpawus791 23 วันที่ผ่านมา +2

    2 года назад пытался написать бинарное дерево на С++. Только когда закончил понял, что криво всё сделал, и этим неудобно пользоваться. Потом стало лень исправлять. Так, что не буду это безобразие никому отправлять. Ради ваших нервных клеток)

    • @user-ps7mk5fo8w
      @user-ps7mk5fo8w 23 วันที่ผ่านมา +1

      Точно. Так бывает, доделаешь наконец, вроде и работает, но понимаешь - "эх, ребята, всё не так"

  • @Berseny
    @Berseny 18 วันที่ผ่านมา

    Вот сортировка как раз очень длительный и утомительный процесс с многократной перестановкой элементов.
    Кстати, вопросик: а ошибки у программистов в программе поиска были такие стандартные, о которых рассказывал автор видоса? Типа, переполнение промежуточного значения и неверное условие границ отсева... И возврата... Или есть еще какие-то подводные камни в трех -соснах- строках кода?

  • @user-ms9vw4go4r
    @user-ms9vw4go4r 23 วันที่ผ่านมา

    Обратное геометрической прогрессии?

  • @klavesin
    @klavesin 21 วันที่ผ่านมา

    14:25 Пасхалочка :-)

  • @-fym-
    @-fym- 8 วันที่ผ่านมา

    А как в неупорядоченном массиве искать?

  • @user-jr6ue7rk9p
    @user-jr6ue7rk9p 19 วันที่ผ่านมา

    Бинарный поиск легко может как найти нужное число, так и обратная задача: добавление 1 элемента в массив.

  • @ssv496
    @ssv496 18 วันที่ผ่านมา

    На самом деле, лексикографическое упорядочение - это древесная структура данных: первый знак #х, второй знак #у и т.д.
    Соответственно и момент выяснения, в каком месте находится "середина диапазона" по отношению к искомому номеру - это тоже сравнение внутри дерева.
    Тогда нафига проверять в дальнейшем те ветви, которые уже заведомо отвергнуты на предыдущей проверке???
    То есть - древесная структура данных однозначно диктует древесный поиск в качесве бвстрейшего!☝️
    Бинарный алгоритм хорош при поиске в линейно упорядоченном массиве - например на этапе выяснения, какая из N букв стоит на следующей позиции.
    И тогда возникает вопрос: скольки буквенным алфавитом следует пользоваться, чтобы в итоге быстрее найти нужный объект из N?
    Боюсь соврать, но по-моему ответ "е" 😊

  • @CatFromCo
    @CatFromCo 19 วันที่ผ่านมา

    Где отсортированы все решения проблем, чтобы искать их с помощью бинарного поиска?

  • @user-dy3hz4ph8k
    @user-dy3hz4ph8k 23 วันที่ผ่านมา

    13:43 в 10-й строке пропущена точка с запятой, в этом ошибка?

    • @suuron
      @suuron 22 วันที่ผ่านมา

      Это опечатка, если такой код был бы написан в библиотеке, то он просто не скомпилировался

  • @MimakaGamleT
    @MimakaGamleT 22 วันที่ผ่านมา

    Как всегда захватывающе. F

  • @extressar679
    @extressar679 21 วันที่ผ่านมา

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

  • @EvgenLyakh
    @EvgenLyakh 23 วันที่ผ่านมา +2

    А еще интересно, почему Виталий для примера выбрал число 37...? :)
    th-cam.com/video/d6iQrh2TK98/w-d-xo.html&ab_channel=Veritasium

  • @uvuvosaskot
    @uvuvosaskot 23 วันที่ผ่านมา

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

  • @nickolaymerkin248
    @nickolaymerkin248 20 วันที่ผ่านมา +1

    Две самые популярные ошибки - это ошибка границы (она же - ошибка плюс-минус-единицы).
    Если вы понимаете, о чём я.

  • @andrewtar4388
    @andrewtar4388 20 วันที่ผ่านมา

    а вот я бы еще такой вопрос задал: а какой смысл писать код бинарного поиска, если он уже есть? на том же Python есть bisect.
    крайне маловероятно, что свой код будет работать лучше, чем всеми используемые реализации, т.е. пользоваться им даже ты сам/сама не будешь. понимания принципа работы поиска едва ли станет больше.
    а особенности языка, распределения памяти, переполнения и пр. и так встретятся при постоянном кодинге. а если кодишь не постоянно, то с этими проблемами тем более нет смысла возиться: есть рабочий проверенный вариант - берешь его, адаптируешь для своих нужд и используешь

    • @alexeidubrovin5234
      @alexeidubrovin5234 20 วันที่ผ่านมา

      если это нужно впихнуть в какой-нибудь stm32f103 то ваш питон это будет минуты переваривать и засрёт там всю память, максимально вероятно что напишу это на C/C++/fpc/Rust, будет работать во много раз быстрее и не потребуется столько памяти
      конечно, можно оперировать что и в STL есть бинарный поиск на шаблонах, но не всегда разумно тянуть какой-нибудь std::vector со всеми его методами и полями

  • @user-ys2df3ls7q
    @user-ys2df3ls7q 23 วันที่ผ่านมา +13

    В коде ошибка: return mid. При этом выше в коде Mid

    • @correlat1on
      @correlat1on 23 วันที่ผ่านมา

      Аналогично с Array array в elif.

    • @dmitriish.350
      @dmitriish.350 23 วันที่ผ่านมา

      Чатгупэтэ писал)

    • @alexgmail5666
      @alexgmail5666 23 วันที่ผ่านมา +1

      Ну он же так и сказал) th-cam.com/video/zWyPZUe1VcE/w-d-xo.html

    • @WantedWhiteTiger
      @WantedWhiteTiger 7 วันที่ผ่านมา

      В питоне вообще не принято переменные с прописных писать)

  • @natashok4346
    @natashok4346 22 วันที่ผ่านมา +1

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

  • @user-yw3hl9qz9l
    @user-yw3hl9qz9l 23 วันที่ผ่านมา

    Дональд Кнут, стрелочная нотация-это его?

  • @Olga-de3ru
    @Olga-de3ru 23 วันที่ผ่านมา

    Только алгоритм, по-моему, тернарный (где бинарность - частный случай: для четного числа элементов в массиве).

    • @suuron
      @suuron 22 วันที่ผ่านมา

      Конечно нет, тернарный поиск - это совсем другой алгоритм, хотя с такой же асимптоткой, он нужен для того, чтобы найти экстремум на выпуклой на каком-то подотрезке функции

  • @romanbykov5922
    @romanbykov5922 23 วันที่ผ่านมา +1

    return -1 в пайтоне совершенно необязательно, так что это даже 11-строчный алгоритм.

    • @borisov4028
      @borisov4028 23 วันที่ผ่านมา

      тебе в пайтоне строчки 4 достаточно будет

    • @romanbykov5922
      @romanbykov5922 22 วันที่ผ่านมา

      @@borisov4028 мне?!

    • @SayXaNow
      @SayXaNow 17 วันที่ผ่านมา

      который даже не запустится

  • @Menshinin
    @Menshinin 23 วันที่ผ่านมา +1

    Гениально. Сначала мы долго и мучительно отсортируем миллиард записей, а потом быстро найдём нужную :)
    Дело не в методе поиска, а в отсортированности данных.

    • @suuron
      @suuron 22 วันที่ผ่านมา +1

      Проще один раз отсортировать и потом искать за логарифм, чем каждый раз использовать линейный поиск

    • @suuron
      @suuron 22 วันที่ผ่านมา

      И сортировка миллиарда записей займет не так уж много времени

    • @antizai.
      @antizai. 10 วันที่ผ่านมา

      Сортировка слиянием и быстрая сортировка имеют тот же принцип

  • @canniballissimo
    @canniballissimo 23 วันที่ผ่านมา +1

    th-cam.com/video/zWyPZUe1VcE/w-d-xo.html
    тоже косяк
    У L+R не будет на 3 цифры больше. Максимум на 1

  • @mrcstepanyl6658
    @mrcstepanyl6658 23 วันที่ผ่านมา +1

    Я щас учусь в 11 классе, в этом году прошёл на всерос по инфе. Могу смело сказать, что всех людей, косячащих в такой халяве, как бинок, надо уволить нафиг

  • @yogalenovo8262
    @yogalenovo8262 22 วันที่ผ่านมา

    15:00

  • @user-pg8ry1tm3t
    @user-pg8ry1tm3t 23 วันที่ผ่านมา

    Сортировка сравнением ограничение по временной сложности nlogn именно из-за логарифм поиска… этот самый логарифм поиска многим Математикам не давал покоя… так появились деревья

  • @user-qj1cq4vk8s
    @user-qj1cq4vk8s 23 วันที่ผ่านมา

    Переполнение целых чисел? Со времён ухода с 8-битных процессоров не слышал про такое.

    • @user-cz9ub6iw6w
      @user-cz9ub6iw6w 23 วันที่ผ่านมา

      Но это не значит, что переполнение невозможно

  • @voovvvv
    @voovvvv 23 วันที่ผ่านมา

    Как правильно заходить в библиотеку 😅
    Надо сразу подойти к библиотекарю и поздороваться.
    Сразу спроси есть ли долги и отдай книги которые брал ранее.
    Только после этого проси новые!

  • @igarazha
    @igarazha 21 วันที่ผ่านมา

    Лучше было бы тогда указать индексацию с нуля

  • @alexanderspeshilov839
    @alexanderspeshilov839 22 วันที่ผ่านมา

    1. Бинарный поиск это, конечно, хорошо. Но если есть возможность пользоваться знанием того, какое распределение, то есть более эффективные алгоритмы. В нерперывном случае для поиска нуля монотонной гладкой функции (что по сути та же задача) обычно применим метод Ньютона, который обходит дихотомию как сокол черепаху. В дискретном случае иногда также получается воспользоваться структурой набора данных.
    2. 7:40. "//" в Рython для комментариев не используется (используется "#")
    3. Каждый раз, когда слышу "для хеш-таблиц среднее время поиска - константа" тяжело вздыхаю. Не то чтобы это совсем неправда, но есть достаточно много случаев, когда это ломается.
    4. Написать без ошибок код бинарного поиска вполне можно. Но это такой челлендж для занудных зануд - глаз должен быть намётан на подобные ошибки.

    • @SayXaNow
      @SayXaNow 17 วันที่ผ่านมา +1

      2, это код вообще не запустится, т.к. array и Array - это два разных имени в питоне. mid - туда же. Виталик видимо языки попутал, или вставил фрагмент из запроса в ЧатГПТ - они любит иногда такое подкидывать.

  • @Feofan_Ivanov
    @Feofan_Ivanov 8 วันที่ผ่านมา

    Двадцать пять лет тому назад, я поручил бинарному поиску найти смысл жизни, а он, редиска, до сих пор ищет. При этом, он умудрился пережить двух кошек, одну собаку, три аквариума с рыбками, бесчисленное количество кактусов и тараканов, причём не только тех тараканов, которые живут за печкой, но и в разных головах. ;-)
    Ну это всё шутки юмора, а теперь о серьёзном: этот комментарий 227-ой, а это простое число! ;-)

  • @roman_ra_reality_test
    @roman_ra_reality_test 22 วันที่ผ่านมา

    Полинарный поиск круче, если использовать распараллеливание.

  • @x__dos
    @x__dos 23 วันที่ผ่านมา

    а гугл как ищет?

    • @suuron
      @suuron 22 วันที่ผ่านมา

      мб ахо-карасик + еще что-то

    • @ilyakaminsky466
      @ilyakaminsky466 19 วันที่ผ่านมา

      Поиск гугла - это и есть патент А. Брина с его подельником, не помню как звать.
      Когда гугл появился, уже были всякие поисковики, и ничего, как-то народ справлялся. Но, когда появился гугл - это было, как открытое окно в мир, как фокус-покус. Он находил вещи, которые другие поисковики тупо не видели.
      Как дело обстоит сейчас, сказать не могу, гугл оккупировал всё пространство, и мне его хватает.

  • @DarkLite
    @DarkLite 12 วันที่ผ่านมา

    -Этот алгоритм легкий разберется даже ребенок
    -В нем ошибаются 90% программистов
    ок...

  • @Xiripyu
    @Xiripyu 18 วันที่ผ่านมา

    Я такой алгоритм классе в 8ом как хобби в школе сам придумал написав его без ошибок, я могу считаться гением?🤣

  • @pavellevin5229
    @pavellevin5229 21 วันที่ผ่านมา +1

    Есть ещё и адаптивный поиск. Пример: если вы ищете в справочнике слово на букву Ф вы же не лезете в середину справочника. Вы лезете ближе к концу.

    • @WantedWhiteTiger
      @WantedWhiteTiger 7 วันที่ผ่านมา

      Это если известно, что на каждого элемента примерно одинаковое количество.
      А если в списке из ста слов 70-80 на букву Ф?

  • @m1ke_i
    @m1ke_i 21 วันที่ผ่านมา

    0:55 - властвуй, от слова "власть".

    • @WantedWhiteTiger
      @WantedWhiteTiger 7 วันที่ผ่านมา

      Что гуманитарий забыл на канале математика?😅

  • @slitok_
    @slitok_ 22 วันที่ผ่านมา

    Не знал что 77 = 71 9:31

  • @soolvil
    @soolvil 23 วันที่ผ่านมา

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

    • @MrDerReiter
      @MrDerReiter 22 วันที่ผ่านมา

      Это именно он и есть. Принцип заключается в том, чтобы разбивать задачу на более простые подзадачи, пока мы не дойдём до крайнего случая, т.е. подзадачи, решение которой элементарно. В данном случае мы разбиваем задачу поиска до тех пор, пока нам не придётся искать среди всего лишь двух элементов, это и будет крайний случай. Вполне себе "разделяй и властвуй". Просто при каждом шаге мы делаем проверку и отбрасываем те подзадачи, которые заведомо неактуальны; это не нарушает сам принцип, просто дополняет его.

  • @THE_MYTHICAL
    @THE_MYTHICAL 22 วันที่ผ่านมา

    1:00
    1) увидел код, но не успел рассмотреть
    2) перемотал назад чтобы рассмотреть
    3) понял что не знаешь какой это язык
    4) смотришь дальше

    • @user-qv9eg8kz9l
      @user-qv9eg8kz9l 21 วันที่ผ่านมา

      Паскаль

    • @RAlex061
      @RAlex061 19 วันที่ผ่านมา

      @@user-qv9eg8kz9l , это не Паскаль. 1) Отсутствуют точки с запятой, разделяющие операторы; 2) в заголовке function используется is; 3) после else стоит двоеточие; 4) нет блоков begin ... end; 5) возвраты из тела функции производятся отсутствующей в Паскале конструкцией return значение

    • @WantedWhiteTiger
      @WantedWhiteTiger 7 วันที่ผ่านมา

      Питон
      С кучей ошибок

  • @canniballissimo
    @canniballissimo 23 วันที่ผ่านมา +3

    th-cam.com/video/zWyPZUe1VcE/w-d-xo.html
    77=71...
    Кто ещё заметил?

  • @user-wr7pn7gv6k
    @user-wr7pn7gv6k 22 วันที่ผ่านมา

    Лучший способ поиска - ничего не терять😊

  • @nickolaymerkin248
    @nickolaymerkin248 20 วันที่ผ่านมา +1

    Больцано и Коши: бисекция рулит!
    Ньютон: алё, мы же всё ещё говорим про математику? Метод имени меня не хотите ли?
    Это к тому, что бинарный поиск - не лучший.
    Он лучший из худших, когда природа хранимых и искомых данных не позволяет ничего больше, чем ввести отношение порядка.
    Даже в библиотеке никто не занимается такой фигнёй, как бисектить по стеллажам (и получать гигантские кешмиссы для произвольного доступа и гигантские задержки для последовательного - бегать от стеллажа к стеллажу). Вместо этого берут индекс.
    И это, кстати, довольно близко по идеям к методам второго порядка.

  • @scooterscooter918
    @scooterscooter918 21 วันที่ผ่านมา

    Да, бинарный поиск - это очевидное решение для упорядоченных массивов. Вот бы было что-то подобное для НЕупорядоченных!

  • @romank.6813
    @romank.6813 23 วันที่ผ่านมา

    А слабо рассказать про алгоритм Гровера?

  • @user-hg9hk3eo9h
    @user-hg9hk3eo9h 23 วันที่ผ่านมา

    Ты не забывай, что когда ты просишь отправить код, указывать среду для его выполнения!!!
    Я как раз таки отправил для VS Code, ну а в REPL без конструкции begin и end просто не обойтись!!!)))

  • @igorseledtsov7345
    @igorseledtsov7345 23 วันที่ผ่านมา

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

    • @suuron
      @suuron 22 วันที่ผ่านมา

      Это улучшение тернорного поиска, а это совсем другое

    • @igorseledtsov7345
      @igorseledtsov7345 22 วันที่ผ่านมา

      @@suuron бинарный.. тернатный , суть в общем одна, просто говорилось что тот что в ролике лучший.. а н ет можно и лучше

  • @evgeniygondarev
    @evgeniygondarev 23 วันที่ผ่านมา

    и тут про бинарные опционы...

  • @elenpeers8365
    @elenpeers8365 15 วันที่ผ่านมา +1

    больше 18 минут говорить о бинарном поиске, и даже не затронуть cache friendly реализацию, или хотя бы перейти на унимодальный поиск - это прямо сильно... мастерство пустых разговоров.

  • @user-ys9js7rs5q
    @user-ys9js7rs5q 21 วันที่ผ่านมา +1

    Вот только он работает исключительно в отсортированных массивах

  • @kroft9170
    @kroft9170 23 วันที่ผ่านมา

    Метод половинного деления.

  • @Vlad22051969
    @Vlad22051969 19 วันที่ผ่านมา

    Фигасе

  • @user-lu8ee8xg1l
    @user-lu8ee8xg1l 23 วันที่ผ่านมา

    +

  • @TheSleepyDrizzle
    @TheSleepyDrizzle 23 วันที่ผ่านมา

    Старый анекдот про "как найти льва в пустыне?" =)

    • @MyOwnShadowEclipse
      @MyOwnShadowEclipse 23 วันที่ผ่านมา

      Построить забор через середину пустыни? Послушать, с какой стороны рычит лев?

    • @ilyakaminsky466
      @ilyakaminsky466 19 วันที่ผ่านมา

      Да, именно.