Алгоритмы на JS #1: бинарный поиск

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

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

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

    ⚛⚛⚛
    Пройди практический курс "Javascript Fullstack разработчик" от MakeWeb.me.
    Детали тут: makeweb.me/course-js-fullstack-developer
    Телеграм для связи по курсу: @makewebchatme

  • @burydima
    @burydima 4 года назад +6

    Спасибо за качественный и полезный контент!

  • @marlonbrando458
    @marlonbrando458 4 года назад +13

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

  • @dm.hol.3624
    @dm.hol.3624 3 года назад +2

    Уважаемый, ты хорош. Благодаря тебе я только что понял бинарный поиск, за два года карьеры.)
    Если непонятно кому, советовал бы выполнять код в голове - просчитывать значения переменных на каждом шаге, хотя бы условно. А если непонятны логарифмы, то просто запомнить принцип - некоторые стандартные алгоритмы хороши для огромных отсортированных массивов.

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

      Спасибо за фидбек. Запилил специальный тредик про логарифм в твитере - twitter.com/vitkarpov/status/1342828952113577984

  • @PhilippeRigovanov
    @PhilippeRigovanov 4 года назад +5

    Спасибо! Чётко, ясно и понятно!

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

    Это лучшее, что я встречал про алгоритмы. огромное спасибо

  • @Алена-н3у6й
    @Алена-н3у6й Год назад

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

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

    Только как неделю начал изучать JS, посмотрев видео сначала ничего не понял, посмотрел второй раз мало что понял, посмотрел видео на след. день и меня просветило, наконец-то понял! Вот только с определением сложности задачи пока туго, пересмотрю видео через время, может тоже просветит)

  • @milykotek
    @milykotek 4 года назад +4

    Долго искала нечто такое! Спасибо вам! Это действительно качественный контент :3

  • @algoseekee
    @algoseekee 3 года назад +5

    Всем привет! Автор видоса здесь 👋 Если есть желание подробнее разобраться в бинарном поиске на практических примерах, я сделал плейлист с решениями задачек с LeetCode на эту тему - ruclips.net/p/PLtRFPaw3fD5647YtyPCXcuVlGOUrMBgks
    PS. У меня на канале каждый вторник, в 20 по Мск, проходят стримы с решениями алгоритмических задач. Welcome!

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

    Я так понимаю, подобные примеры и объяснения взяты из книги "Грокаем алгоритмы".
    Подача хорошая и интересная)) спасибо)

  • @olehzahrebelnyi5996
    @olehzahrebelnyi5996 4 года назад +10

    Ты крут!) Спасибо за тему алгоритмов с использованием JS! Можно еще продолжения этих уроков?

    • @MakewebMeOfficial
      @MakewebMeOfficial  4 года назад +1

      Спасибо, надеюсь полезно! Будем продолжать.

  • @ИванДурак-й4д
    @ИванДурак-й4д 4 года назад

    Спасибо за работу, очень полезные уроки!

  • @whiteguards43
    @whiteguards43 7 месяцев назад +2

    почему left = -1? равзе он не начнет с конца массива?? так же как и arr.length

    • @АлександрСмирнов-щ4с
      @АлександрСмирнов-щ4с 4 месяца назад +1

      тоже не понял почему -1, а не 0

    • @rv4111
      @rv4111 Месяц назад

      потому что -1 = граница, за которой точно нет элемента, тк поиск начнется с 0

  • @lisalisa2425
    @lisalisa2425 8 месяцев назад

    Здравствуйте, а я не очень понимаю какая в итоге получится сложность последней функции? Я так понимаю О(N*logN) - это сложность встроенного метода sort и О(logN) это сложность бинарного поиска, опустив ее получается можем сказать, что общая сложность - О(N*logN) ?

  • @ПавелРузанкин-м1ж
    @ПавелРузанкин-м1ж 4 года назад

    Супер. Жду не дождусь видео по другим алгоритмам

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

    спасибо добавил в спонсорблок рекламу . просьба проголосовать

  • @SM-xp8tw
    @SM-xp8tw 3 месяца назад +1

    Непонятно, почему за начальный элемент массива мы берем -1 а не 0, ведь элемента с индексом -1 в массива не существует

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

    ) чего только разработчики высокоуровневых языков не сделают лишь бы не работать на работе.
    Для поиска есть .find
    Для фильтров есть .filter
    Также есть .some .indexOf и прочее.
    В браузерах обычно мы не пишем ракеты летящие на Марс.

    • @MakewebMeOfficial
      @MakewebMeOfficial  4 года назад +1

      Всё верно. Противоречий нет.

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

      ну ведь нужно понимать, как это работает под капотом.

  • @Alexxl-l7b
    @Alexxl-l7b 4 года назад

    Супер круто, спасибо.

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

    четко все объяснили :)

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

    Только начинаю знакомство с алгоритмами. Вопрос относительно бинарного поиска. Понятно, что он эффективнее линейного, но сама сортировка та еще задача. Почему опускается алгоритм сортировки при сравнении? Это как сравнивать соленое с квадратным.

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

      Хороший вопрос, спасибо. В видео говорится, что прежде чем запускать бинарный поиск требуется выполнить сортировку, соответсвенно всё зависит от того сколько этих самых поисков предполагается выполнить. Если нужно найти элемент всего один раз - нет смысла сортировать, проще линейный поиск запустить, но если поиск нужно выполнить миллион раз, имеет смысл сперва потратить время на сортировку. Где этот самый порог - зависит от конкретного случая, поэтому в реальном проекте имеет смысл профилировать.

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

    Очень интересно

  • @МаксимЛибер-ф2н
    @МаксимЛибер-ф2н 3 года назад

    Добрый день, подскажите, как переписать данный поиск чтобы он искал не только точный элемент но и больше\равно. Например:
    Есть массив [5,10,15,38,49,104]. И если попытаться найти элемент, скажем 18 чтобы возвращало индекс числа 49, если 14 то индекс 15. То есть не только элемент но и >= элемент. Спасибо

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

      То, о чем вы говорите похоже на upper_bound. Можно, например, вот так: codepen.io/vitkarpov/pen/ZEpVKPx?editors=0010

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

    Вот тут я показывал живой пример реализации двоичного поиска на микроконтроллере:
    ruclips.net/channel/UCETNBYBk4IA0rSHCnp2jnhQ

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

    Круууууть! Прекрасная тема. Я этим в свое время занимался, только на 1С и я реализовывал разные сортировки. Единственное я не понял: почему второй вариант называется бинарным?

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

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

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

    странно бинарный поиск работает только с сортировкой num.sort((a, b) => a - b);

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

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

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

    А почему return -1 пишется не в else, например?

    • @cherniaev
      @cherniaev 4 года назад +1

      Else избыточен. Если условие выполнится, то функция вернет результат и строки дальше выполняться не будут. Зачем писать больше?
      Например, такие записи идентичны:
      1).
      if (condition) {
      return true;
      } else {
      return false;
      }
      2). Скобочки для однострочного условия можно тоже опустить.
      if (condition) return true;
      return false;
      В коде из видео я не увидел return -1 после условия, только после цикла. Но, надеюсь, я правильно понял ваш вопрос. Успехов!

    • @VladiGuitar87
      @VladiGuitar87 4 года назад +1

      @@cherniaev спасибо

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

    У сортировки сложность больше чем O(n).

  • @ДмитрийМеньшиков-ю5с

    Я бы теорию добавил, практика для начинающих быстровата.

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

    Спасибо. Если 95% не понял, что посоветуете? Хотя JavaScript очень нравится и хочу на нем код профессионально писать.

    • @ПавелРузанкин-м1ж
      @ПавелРузанкин-м1ж 4 года назад +2

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

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

      @@ПавелРузанкин-м1ж Спасибо. На днях купил эту книгу. Читаю на стр.20
      Что необходимо знать
      Чтобы читать эту книгу, необходимо знать базовую алгебру.
      Например, возьмем следующую функцию: f(x) = x * 2.
      Чему равен результат f(5)? Если вы ответили "10" - читайте спокойно.
      Если бы эта простая задачка была задана на JavaScript, я бы ее решил быстро.
      Но с алгеброй все очень плохо (школа давно в прошлом, уже 43 :) ).
      Чтобы построить алгоритмы, нужно на отлично алгебру знать?
      Или алгоритмы это must have только если продукт надо кодить?

    • @ПавелРузанкин-м1ж
      @ПавелРузанкин-м1ж 4 года назад +1

      @@MishaWS Чтобы строить алгоритмы, достаточно обладать логическим мышлением, не более того. А все классические алгоритмы, которые приводятся в книги, нужны по сути для работы с большими данными (не big data science) для быстрой сортировки и нахождения правильного результата

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

      Привет. Можно начать с ruclips.net/p/PLtRFPaw3fD55QtDdLVruhKa0M9Wv1l3SR где я разбираю всё с нуля и очень-очень подробно.

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

    Я так понял это не для новичков, а кто давно в теме?!))
    Потому что все пишут: «хорош объяснил! Все понятно», только я нечего не понял))))

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

      Если вы сформулируете вопрос, мы попробуем на него ответить :-)

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

    Мозг.

  • @samogray86
    @samogray86 4 года назад +1

    зачем давать уроки с неправильными решениями ? ваши уроки только вредят тогда а не помагают), в примере все будет работать только если нет повторяющигся елементов, например найти в масиве [1, 56, 2, 3, 4, 5, 3, 2, 6, 7, 56, 8]; 56 даст -1 )) ,
    вот првильное решение:
    function binarySearch(value, list) {
    let left = 0;
    let right = list.length - 1;
    let position = -1;
    let middle;
    while (left value) {
    right = middle - 1;
    } else {
    left = middle + 1;
    }
    }
    return position;
    }

    • @algoseekee
      @algoseekee 4 года назад +1

      Спасибо за комментарий, выходит вы пытались проверить этот код и разобраться - а говорите видео бесполезные :-) Не очень понимаю пока что не работает, давайте на конкретном работающем коде проверим - codepen.io/vitkarpov/pen/XWmjzMp , вот код из видео на вашем примере, показывает мне что 56 находится под индексом 10. Что именно не работает?

    • @algoseekee
      @algoseekee 4 года назад +1

      Более полный набор тестов можно найти здесь - leetcode.com/problems/binary-search/ . Давайте проверим там.

    • @algoseekee
      @algoseekee 4 года назад +1

      Другой вопрос, что если элементы повторяются, то вообще говоря получаем неопределённое поведение - то ли один найдётся, то ли другой.

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

      Viktor Karpov Да но находит ближащий елемент, а так вобще не находит, тогда нужно в видно уточнить что пример работает только с таким типом списка, где только уникальние числа.

    • @algoseekee
      @algoseekee 4 года назад +5

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