Тренировки по алгоритмам от Яндекса. Лекция 6: «Бинарный поиск»

Поделиться
HTML-код
  • Опубликовано: 13 окт 2024
  • Расписание тренировок доступно по ссылке: yandex.ru/yain...
    Чат в Телеграме для общения и вопросов о тренировках: t.me/joinchat/...

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

  • @EaSy64region
    @EaSy64region 3 года назад +74

    Это не лекция, а произведение искусства. Лектор - душевный. Спасибо 👏

  • @maxpanteleev9448
    @maxpanteleev9448 3 года назад +43

    Я сижу такой уверенный, что уж я то точно смогу изи написать бинарный поиск. Дошел до задачки про совет школы. Написал за 15 минут на бумажке решение через бинарный поиск. Думаю дай ка напишу реализацию на джаве. И 4 гребаных часа промучался ))) теперь я сижу уже не такой уверенный, но довольный собой)

  • @HappyGameNikit
    @HappyGameNikit 2 года назад +38

    0:06 Интро
    1:05 Теория
    4:08 Реализация бинпоиска
    8:55 Как проверить реализацию?
    15:55 Задача 1
    18:00 Решение 1
    22:28 Задача 2
    23:42 Решение 2
    27:24 Задача 3
    29:02 Решение 3
    29:56 Задача 4
    32:02 Решение 4
    35:10 Задача 5
    35:15 Решение 5
    40:00 Задача 6 (из жизни!)
    41:58 Решение 6 + поиск по вещественными числам
    47:58 Задача 7
    48:42 Решение 7
    54:58 Q&A

  • @high_fly_bird
    @high_fly_bird Год назад +8

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

  • @СоломонЗуев-я2л
    @СоломонЗуев-я2л Год назад +2

    Спасибо за курс видео по алгоритмам! Узнал много нового и закрепил то, что уже знал

  • @egorkalmykov4003
    @egorkalmykov4003 3 года назад +4

    Спасибо большое за полезную и информативную лекцию !!!

  • @the_c0met22
    @the_c0met22 Год назад +1

    Ура, это Густокашин. Я уже успел полюбить его объяснения на курсе по введению в cpp.

  • @ДмитрийД-о6э
    @ДмитрийД-о6э 3 года назад +11

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

  • @hounddog1
    @hounddog1 11 месяцев назад +2

    Я стараюсь сначала делать задачи, а затем смотреть ответ. Так вот в третьей задаче, я написал чек следующим образом:
    def checksize(m, params):
    w, h, n = params
    return np.sqrt((w*h) // n) >= m
    И мне кажется это более правильный ответ, так как при пробных данных W=20, H=10, N=5, максимальная длина одной стороны получается 6.3 при проверке и моя функция выдает 6, что логично. А функция, что ответе дана выдает 5. Think about it (или скажите в чем я могу быть неправ).

    • @GreatVolcano
      @GreatVolcano 10 месяцев назад

      Попробуйте на бумаге начертить 10 на 20 и разместить 5 квадратов стороной 6. Там 3 получается только. H = 10, а значит по высоте только 1 квадрат вмещается. По ширине соответсвенно 3 только

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

    Благодарю за лекцию!

  • @olegbokerov7152
    @olegbokerov7152 Год назад +1

    Чет не то в задаче с велосипедистами - скорость велосипедистов не изменяется, на 49:45 говорят неверно.
    2 - нет никаких убывающих и возрастающих функций на 50:23. Обе функции положения велосипедистов возрастающие - для более быстрого велосипедиста функция растет быстрее, для медленного медленнее
    3 - непонятно, какая правая граница для времени

  • @OdinO4ka1986
    @OdinO4ka1986 Год назад +1

    Лучше чем Павел Марвин, еще никто не объяснил бинпоиск :(

  • @walcermelodia
    @walcermelodia 2 года назад +3

    19:07 "обычно в школах не бывает миллиард родителей"

  • @АлександрИлюхин-ъ5о
    @АлександрИлюхин-ъ5о 2 года назад +1

    15:55 Задача 1
    ну, тут легкое решение (наверное это и есть эффективное математическое решение)
    1) найдем треть (минимальное кол-во родителей) для этого (N-K+1)//2
    2) если найденная треть больше или равна K, то родителей уже хватает
    3) если родителей не хватает: вычтим из трети текущее кол-во родителей и получим ответ
    решается наверное за O(1)

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

      Согласен с этим решением. Только наверное 2) если найденная треть меньше или равна K, то родителей уже хватает. И ещё наверное в случае K > (N-K+1)//2 мы должны прибавить к общему числу человек (K - ((N - K + 1) // 2 )) * 2 не родителей.

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

      @user-gh2sq4ps4o Как вы пришли к формуле (N-K+1)//2?

    • @123-k6t
      @123-k6t 10 месяцев назад

      Иногда формулу придумать сложнее, чем написать бинпоиск

  • @edwythefair5215
    @edwythefair5215 3 года назад +2

    29:26 , кто-нибудь, дообъясните, пожалуйста, какие здесь левая и правая границы?
    upd: вроде разобралась сама: l = 1; r = min(w, h)

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

    Немного за лектором успеваю, но многое непонятно. Было бы лучше, если б был запуск кода с инпутом или курс на степике с задачами, т.к. контест не открыт.

  • @SuperScrapland
    @SuperScrapland 3 года назад +1

    checkParams мягко говоря не обязательно передавать в функцию, лямбда уже должна сама содержать эти параметры

  • @seakrill
    @seakrill 3 года назад

    39:44, разве >= в левом поиске изменить картину? Чтобы выйти не на первый x, а на последний нужно при seq[m] двигать левую границу ( что происходит при правом поиске), при >= как и при > двигается правая граница. Т.е. seq[m] попал на x (впереди есть еще x), но check дает True и левый поиск идет по первому условию и двигается правая граница - соотв. до последнего x уже не добраться.

  • @RomanTokarenko
    @RomanTokarenko 2 года назад +1

    Подскажите, пожалуйста, в задаче 3 (про стикеры) можно было бы использовать внутри функции check такое соотношение
    ```
    (size * N

    • @GreatVolcano
      @GreatVolcano 10 месяцев назад

      Да, тоже сначала подумал. Но тут косяк. Если N = 2, size = 5 , H = 5 и W = 10, то тут же сможем оно (на бумаге если начертить, то будет 2 квадрата по горизонтали), а по этому условию не подойдёт. Так что не подходит оно

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

    А почему в задаче 2 (про Юру и задачи) вы берете l = 0, а не l = 1. Нумерация дней же с 1 должна начинаться. Поясните, пожалуйста @Академия Яндекса

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

      А, ответ уже есть в лекции))

  • @mrhilgrad2813
    @mrhilgrad2813 2 года назад +2

    блин тут, что не будет пиццы? эх надо послать младшего брата за ней

  • @ramilrizvanov6864
    @ramilrizvanov6864 Год назад +1

    тем не менее, какой N выбрал Юра?)

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

    забавно что большинство задач с лекции и контеста на эту тему встречались на рукод фестивале...

  • @АльбусДамблодр
    @АльбусДамблодр Год назад

    Очень непонятно, есть функция check, а мы задаем какую то checkendowement в первой задаче.

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

      `check` это параметр функции, так называемый callable - то есть метод, который будет вызван для проверки условия. checkendowement - это пример функци для этого параметра.
      Т. е. Пример вызова может быть
      ```
      lbinsearch(0, 25, 'checkendowement', [15, 3])
      ```
      Я бы сказал, что в лекции не хватает слайдов с примерами применения описанных функций - так было бы более наглядно

  • @konstantin6043
    @konstantin6043 Год назад +1

    В задаче про велосипедистов ни одна функция нигде не убывает.

  • @АндрейРузанов-ы7ц

    я пол видео не понимал что такое там params и chechparams, а потом как понял

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

    на 33.02 зачем нам вообще возвращать длину массива, если сама l нам будет выдавать правильный ответ? если нет числа в массиве, то l дойдёт до конца и её индекс будет равен длине массива.

  • @Eduard.Kardashov
    @Eduard.Kardashov Год назад

    к задаче 4, а если искомое число меньше, чем наименьшее число в последовательности, то вернется индекс 0 !!!

  • @zheka77111
    @zheka77111 6 месяцев назад

    Блин, ничего не понял с хорошими и плохими случаями

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

    00:29:20

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

    Так себе примеры применения бинарного поиска:
    1. Не пишите свои парсеры логов, используйте готовые решения. Своё нужно писать только если вас, по каким-то причинам, не устраивает готовые. И эти причины должны быть достаточно весомые.
    2. Не пишите свои калькуляторы кредитов, вы можете ошибиться в каких-то коэфецианетах или что-то не учесть и попасть на деньги. И НИКОГДА не бирети ипотеки под будущие доходы. НИКОГДА, слышите.
    Автор, чему ты учишь молодежь.

  • @LionKing-qp1lk
    @LionKing-qp1lk 3 года назад +3

    Яндекс в такси две улицы в разных районах города с одним названием добавить не могут.
    А еще алгоритмам учат...

    • @EaSy64region
      @EaSy64region 3 года назад +15

      +++ и в такси еще деньги берут, могли бы за бесплатно возить. В гугле такси вообще нет, зачем-то свое придумали

    • @WhiteBriar
      @WhiteBriar 3 года назад

      Lion King, что за город такой, где две улицы с одинаковым названием в разных районах?

    • @LionKing-qp1lk
      @LionKing-qp1lk 3 года назад

      @@WhiteBriar А почему вы не хотите подумать, что таких городов может быть несколько?
      Города растут, укрупняются. То что сейчас районы - когда то давно были независимые пункты на расстоянии N км. И улицы именовали без оглядки друг на друга.

  • @AbraKadabra000
    @AbraKadabra000 3 года назад +4

    Даже на скорости х2 смотреть невозможно:-/ примените уже бинарный поиск для вырезания пауз в речи.

    • @EaSy64region
      @EaSy64region 3 года назад +9

      Я тоже меньше чем на х4 алгоритмы не воспринимаю

    • @maxpanteleev9448
      @maxpanteleev9448 3 года назад +11

      я х18 смотрю, вообще норм

    • @artemlobach900
      @artemlobach900 3 года назад +16

      А мне по обложке сразу всё понятно

    • @dossymzhankudaibergenov8193
      @dossymzhankudaibergenov8193 2 года назад +6

      по названию видео все понял

    • @devopn
      @devopn 2 года назад +4

      я понял