Binary Search Algorithm | JavaScript

Поделиться
HTML-код
  • Опубликовано: 23 фев 2021
  • Друзья, этим видео мы начинаем долгожданную рубрику Алгоритмов и Структур данных.
    Сегодня мы с вами рассмотрим один из самых известных и часто встречающихся на фронтенд-собеседованиях алгоритмов - Бинарный поиск. Его также называют Двоичный поиск.
    Он позволяет найти необходимое в массиве из миллиона элементов всего за 20 итераций. Важный момент: этот алгоритм работает только на отсортированных массивах данных.
    Кроме самого принципа работы алгоритма, мы также с вами напишем нашу с вами реализацию поиска элементов в массиве на JavaScript.
    Приятного просмотра!
    Обязательно оставляйте в комментариях свои пожелания, какие алгоритмы именно вы хотите увидеть на нашем канале.
    Поделитесь этим видео с друзьями и поставьте нам красивый лайк!
    ---
    Если видео было для вас полезным, ставьте лайк и поделитесь им с друзьями.
    Подписывайтесь на наш канал: bit.ly/fs-ytb
    ---
    Присоединяйтесь к нам в соцсетях:
    FB: / frontendscience
    Instagram Сергея Пузанкова: / puzankovcom
    Заходите на наш сайт: frontend-science.com/
    #BinarySearch #БинарныйПоиск #алгоритмы #frontend #itсобеседование #ityoutubers​ru

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

  • @denisoleksyuk5346
    @denisoleksyuk5346 3 года назад +21

    Я бы хотел разобрать все самые известные алгоритмы, можно прям с книги грокаем алгоритмы, там и про графы, Дейкстры и т.д, можно было бы прям по 2-3 задачки на каждый алгоритм для закрепления

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

      Алгоритмы и структуры данных уже начали - вот бинарный поиск первое из видео серии. В плейлисте с задачками - как раз сейчас задачи на бинарный поиск. Дальше будет много всего интересного.

  • @alexr6829
    @alexr6829 3 года назад +36

    Даешь алгоритм обхода бинарного дерева в глубину/ширину? или инвертирования того же дерева)! Кто за, ставим лайки!

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

      Хорошая идея! До этого тоже дойдем. Но вначале прийдется разобраться с деревьями и бинарными деревьями в частности.

    • @user-ju3sl1yx9e
      @user-ju3sl1yx9e 2 года назад +2

      @@frontendscience 6 месяц как ждем!

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

      @@user-ju3sl1yx9e и в течение этих 6 месяцев для Вас лично прям ничего другого полезного не вышло на канале - вот сидите и ждете у компа все полгода.... грустненько.

  • @vladsosnov3749
    @vladsosnov3749 3 года назад +14

    Спасибо за видео👍
    Алгоритм быстрой сортировки хотелось бы увидеть)

    • @frontendscience
      @frontendscience  3 года назад +3

      Благодарю за фибдек.
      Отличный выбор :) запишем!

  • @mrivanan101
    @mrivanan101 3 года назад +6

    Спасибо за видео! По поводу поиска среднего элемента. Долго думал, почему надо прибавлять позицию левого указателя. Потом понял, что (right - left) / 2 + left == (right + left) / 2, то есть старое доброе среднее арифметическое двух чисел. По-моему, со средним арифметическим гораздо проще понять

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

    Хотелось бы больше о самих алгоритмах, поняв алгоритм, лучше самому их реализовывать). Спасибо. Вот приятный канал!)

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

    Нажал лайк, колокольчик на все уведомления!

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

    Обожаю Ваш контент! Отличный материал! Спасибо за Ваш труд!

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

      Очень приятно! Спасибо большое за поддержку! Это очень вдохновляет 😊🤩

  • @user-bh6mc8pd8g
    @user-bh6mc8pd8g 2 года назад +2

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

  • @soloviyshpak
    @soloviyshpak 3 месяца назад +1

    респект за имена с теории большого взрыва 😊

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

    Спасибо за контент на вашем канале! Полезно!)

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

      Благодарим за поддержку! Рады, что было полезно!

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

    Блин, наверное первый раз с такой легкостью на сердце ставлю лайки в Ютубе под каждым просмотренным видосе на канале. Спасибо!

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

      Круто! Очень приятно) благодарю за поддержку)

  • @NoName-zh7cc
    @NoName-zh7cc 2 года назад +1

    Спасибо большое!

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

    Большое спасибо!

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

    Лайк за Теорию Большого Взрыва)

  • @JavaScript_95
    @JavaScript_95 4 месяца назад

    Огромное спасибо! Очень ясно понятно, и самое главное видео не большое.

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

    Отлично!

  • @moguha
    @moguha 3 месяца назад +1

    Огромное спасибо

  • @user-qb1dm3dq6e
    @user-qb1dm3dq6e 3 года назад +3

    Сергей, спасибо громадное! В отличие от Владилена вы обучаете вглубь, а не тому как бы быстрее начать писать код и начать зарабатывать. Продолжайте в том же духе. Очень нужно и ценно.

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

      Ценю Вашу поддержку! :) Я тоже за то, чтоб начинать писать код пораньше и получать опыт. Но в то же время наращивать глубину знаний. Потому что благодаря им будет качественное развитие как профессионала.

  • @-anonim-3008
    @-anonim-3008 Год назад +1

    Спасибо огромное! Не думал, что за 6 минут можно легко выучить бинарный поиск. Я сначала середины рассчитывал как (right+left)/2 - но из-за этого получалось на 1 итерацию больше. Упростил ваше выражение, получилось right-3*left;

    • @user-uk5tj3qn5q
      @user-uk5tj3qn5q Год назад +1

      Чтобы уменьшить итерации сделай проверку, arr[left] или arr[right] === target.
      function binarySearch(array: any, target: any) {
      if (!Array.isArray(array)) {
      return -1;
      }
      let left = 0;
      let right = array.length;
      while (left

  • @user-dq6np2yy6g
    @user-dq6np2yy6g 3 года назад +1

    Отличное видео! Было бы интересно увидеть бинарный поиск по дереву)

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

      Как до деревьев дойдем - будет!

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

    Интересно было бы послушать про поиск при помощи регулярных выражений

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

    шикарное видео, алгоритмы- это то, что нужно любому разработчику

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

      Благодарим за поддержку. Дальше будет еще много полезного! Stay tuned

  • @user-kb7di8rs8v
    @user-kb7di8rs8v Год назад +1

    Доступнее, чем в книгах.

  • @user-xt9nl7no8e
    @user-xt9nl7no8e 2 года назад +4

    Наверное вся жизнь построена на бинарном поиске (как говорится: вселенная стремится к балансу ) где left и right - крайности а mid - это то самый баланс) Нам хорошо когда ми в этом балансе. Если в духовном плане (баланс) это спокойствие. Спокойствие это когда мы не слишком угрюмые и не слишком эмоциональные(например что бы уснуть нам нужно спокойствие- мы не уснем когда будем слишком радостные или наоборот переживать за что то) Если в лечении болезни например то лекарство от яда отличается дозой. Если его мало(left) - нет смыла, если много(right) - вред для организма и тут нам нужен 3-й указатель - mid, также можно наводить еще много примеров где бинарный поиск будет актуальным) спасибо что дочитали это до конца)) Хотя у меня куча крутых каналов в подписках но Ваш в топе)

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

    Где то я уже это слышал) cs50

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

    Решал задачу на поиск из входного массива элемента, у которого индекс совпадает собственно, с самим числом. Банальная невнимательность не позволяла до конца понять, почему данный алгоритм так работает, если учесть, что задача требовала пройти тест на производительность. Конечно, решение всё-таки удалось отыскать, хоть и с применением рекурсии... Спустя 10-ки попыток, снова пересмотрел Ваше видео, всё встало на свои места. Ваш труд не останется в стороне. Браво и большое спасибо за объяснения!!

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

      Благодарю, очень вдохновляет)

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

    Красота. Пора учить алгоритмы)

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

      Походу пора снимать новые видео)) Мотивируешь!

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

      @@frontendscience буду только рад новым видео. Задачки всегда будут интересны) Ещё раз спасибо за твой труд

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

    Как будто пересказ книги 1 главы Грокаем Алгоритмы. Полезно будет для новичков.
    В книге описаны примеры на Python, а Сергей перевел их в JavaScript, спасибо! Хорошая работа.

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

      Прикольно! Это что мне пора книгу писать?)

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

      @@frontendscience я бы посоветовал)

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

      какая разница для какого языка примеры, когда математика одна для всех в мире

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

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

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

      Рад, что понравилось! Да, такое есть в планах.)

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

    Благодарю

  • @user-on7hj2ju9k
    @user-on7hj2ju9k 2 года назад

    спасибо большое, разобрался

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

    Спасибо за видео. Я скидывал задачу на почту, хотелось бы её разбор увидеть:)

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

      Рад что понравилось. Задача отличная! Хороший повод записать видео про каррирование! :)

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

    Вот только сегодня реализовал это метод на JavaScript. Как же удивительно устроен мир). Я ведь даже не гуглил, из книги взял алгоритм. Я иначе реализовал, более 'математически').

  • @andrewb3790
    @andrewb3790 3 года назад +3

    Добрый день ! Запишите плз еще ответы на вопросы для Middle and Senior и как надо правильно на них отвечать. Вот варианты с Доу : 44.У чому принципова різниця між подіями mouseleave і mouseout?
    45.У якому порядку обробляються призначені для користувача події в DOM (click, mouseover тощо)? FIFO чи LIFO?
    46.Що таке Event bubbling та Event capturing?
    47.Порівняйте методи об’єкта event stopPropagation та stopImmediateProparation.
    48.Які є підходи оптимізації продуктивності вебсторінки?
    49.Як реалізований механізм same-origin policy в браузері? На які браузерні API він поширюється?
    50.Назвіть способи зберігання даних у браузері. Порівняйте їх.
    51.Web worker’и. Опишіть особливості передачі даних між worker’ами та основним потоком, між розділеними worker’ами.
    51.Що таке Transferable-об’єкти?
    52.Розкажіть про способи оптимізації виконання ресурсомістких операцій JS для поліпшення продуктивності рендерингу контенту на сторінці.
    53.Чому ResizeObserver викликає події зміни розміру до відтворення елемента, а не після?
    54.Розкажіть, як ви розумієте Web Accessibility?
    55.Опишіть алгоритм створення функціоналу, що забезпечує читання вмісту .txt-файлу при перетягуванні його з файлової системи у вікно браузера.
    56.Що таке Virtual DOM? Спасибо ! Особенно интересно про производительность в вебе - уж очень часто спрашивают

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

      Такое тоже есть в планах :) но чуть позже.

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

    Прикольно. Оказывается я знал этот алгоритм всю свою жизнь из прикола "как поймать льва в пустыне".

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

      Найс! Надо посмотреть, что это за прикол "поймать льва в пустыне")

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

    Очень надеюсь, что продолжение будет

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

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

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

    4:23 Интересное вычисление среднего элемента...
    mid = Math.floor((min + max) / 2); // 1 вариант
    mid = ~~((min + max) / 2); // 2 вариант

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

      я использую побитовое НЕ, так короче

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

      mid = (min + max) >> 1

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

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

    • @frontendscience
      @frontendscience  3 года назад +3

      У нас планируется видео про сложность алгоритмов (Big O). Там как раз разберем разницу по времени исполнения различных алгоритмов на разных примерах. Stay tuned.

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

    Посмотрел недели три назад, сегодня буду внедрять.

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

      Класс! Клево, что пригодилось!

  • @deanwichester6412
    @deanwichester6412 Год назад +5

    middlle = Math.floor(start(left) + end(right) /2 )

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

      с минусом как на видео делают для защиты от оверфлоу

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

    Нужно собрать мегаминкс)

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

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

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

      можно отсортировать 1 раз и потом много раз быстро искать.

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

    Все по очереди

  • @user-wz6wu3px9g
    @user-wz6wu3px9g 2 года назад +2

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

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

    Дякую

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

    Ахах, как видите все очень просто. 😀

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

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

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

    Добрый день!
    Во-первых, спасибо за простой и понятный разбор.
    Второй момент, хочу попробовать интегрировать этот алгоритм в мини-игру "Угадай число" (да-да, всем известная игра для начинающих 😉), но хочу, чтоб отгадывал компьютер. Меня смущает только один момент - не могу придумать, как реализовать подсказку "больше-меньше" и соответствующие шаги. буду благодарен за совет.
    P.s. если все же сам смогу решить, напишу код сюда.
    Еще раз спасибо!

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

      смотри компьютер всегда будет делить доступный range на 2 и говорить пользователю середину. а пользователь говорит больше или меньше. У нас в коде это были if() в которых мы сравнивали с target. тут тебе надо давать пользователю выбрать и его ответ подставить в if

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

      @@frontendscience да, это понятно, что if решает. Но, я когда пытался сделать это, он получался многоэтажный, что не есть хорошо.
      В итоге я сделал чуть иначе, подсмотрев идею в другом проекте. Там на кнопки ставили обработчик события, и в зависимости от нажатой кнопки сдвигали верхний и нижний пределы.

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

      Отличная идея

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

      @@frontendscience спасибо. Но, увы, в целом она не моя.
      Я только применил ее в своей ситуации

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

      @@stastikhomirov8075 ну не всегда надо велосипед изобретать! Успехов

  • @user-cu4gm2km8s
    @user-cu4gm2km8s 2 года назад

    Спасибо за видео!
    только не совсем понимаю зачем усложнять когда можно просто воспользоваться методом arr.indexOf(serchElem) ?
    но при нестандартных ситуациях наверное необходимо знать такие алгоритмы - существенно сократят время и ресурсы машины.
    кстати, возник логичный вопрос - какой метод поиска использует метод arr.indexOf(serchElem) , линейный или бинарный?

    • @user-cu4gm2km8s
      @user-cu4gm2km8s 2 года назад +1

      Проверил, алгоритм array.indexOf(searchElem) проигрывает 15 секунд бинарному алгоритму поиска при 10млн. элементах в массиве для поиска.
      Сергей, а можно этот алгоритм использовать для строчных типов данных?

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

      У строк есть свой метод indexOf.

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

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

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

    Интересует, как объяснять алгоритм индекса на основе бинарных деревьев.?

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

      Когда-нибудь мы до них дойдем)

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

    Интересно то, что для маленьких массивов indexOf() работает быстрее чем бинарный поиск:
    console.time('binary')
    search(array, 9)
    console.timeEnd('binary')
    binary: 0.02001953125ms
    ========================
    console.time('indexOf')
    array.indexOf(9)
    console.timeEnd('indexOf')
    indexOf: 0.010009765625ms

    • @user-vu6hn4ul2i
      @user-vu6hn4ul2i 3 года назад

      Чтобы данные были корректными нужно повторить расчёт несколько раз. Например, 10000 раз.

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

    Не понял зачем ((right - left)/ 2) + left. Мы же ниже всё равно меняем позицию left, нет?

    • @alexuspro26
      @alexuspro26 Год назад +7

      Нормальные люди махом вычисляют средний индекс: (right+left)/2. Автор почему-то решил отдельно вычислять полудлину диапазона поиска, а потом отдельно добавлять смещение левого края, чтобы найти в итоге тот же средний индекс. По математике выражения эквивалентны, так что всё нормально. Только компьютеру лишние действия, но когда фронтендщики переживали на этот счет :-)

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

      ​@@alexuspro26 В решение ((right - left)/ 2) + left используется более маленькие числа, и из этого следует, что нужно меньше памяти.

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

      @@surensamarchyan7230 JS любое число хранит в 64 битах. Числа 34 и 7346752 занимают одинаковое количество памяти. Если же Вы собираетесь хранить и обсчитывать строки, но думаете о битах, то подумайте о тактах. В общем, не убедили.

  • @kreamz4615
    @kreamz4615 9 месяцев назад +1

    а почему если определить значение mid сразу при объявлении переменной - код не работает?

    • @nicealx
      @nicealx 8 месяцев назад +1

      Потому что при следующем цикле mid должен обновиться исходя их новых значений right и left.

    • @kreamz4615
      @kreamz4615 8 месяцев назад +1

      @@nicealx спасибо

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

    Хммм, я бы заменил 9 строку на mid = Math.round((left + right)/2); Тут будет меньше текста, а работает аналогично.

  • @serj0peleng
    @serj0peleng Год назад +4

    в моём счастливом советском детстве этот метод назывался просто: "метод деления пополам"... 😝

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

    Тут косяк, при 1 млн, нужно не млн итераций, если делать обычным перебором O(n) и если искомая фамилия последняя, достаточно 1млн-1, следовательно с 2млн соответственно

  • @user-bc3xw9lz8e
    @user-bc3xw9lz8e 2 года назад +1

    pied piper ☺

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

    Простите за глупый вопрос. Я не понимаю, зачем в мид надо приплюсовывать лефт?

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

      У випадку, якщо шуканий елемент буде правіше середини, після переприсвоювання лефт в наступному циклі середину буде знайдено неправильно, тобто вона буде менша за лефт.

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

      @@_vasyl_5039 дякую))

    • @user-kb7di8rs8v
      @user-kb7di8rs8v Год назад

      В случае, если искомый элемент будет правее середины, после переприсваивания лет в следующем цикле середина будет найдена неправильно, то есть она будет меньше лефт.

    • @user-uk5tj3qn5q
      @user-uk5tj3qn5q Год назад

      1:54

  • @user-oo5iq5dm8i
    @user-oo5iq5dm8i 2 года назад +2

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

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

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

  • @user-zi8ce8ds7j
    @user-zi8ce8ds7j 3 года назад

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

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

      В смысле, в какой программе создавал видео?

    • @user-zi8ce8ds7j
      @user-zi8ce8ds7j 3 года назад

      @@frontendscience Извиняюсь за неточный вопрос, в чём написать такой алгоритм, чтобы его можно было запустить?

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

      Я часто использую сайт codepen для этого

    • @user-zi8ce8ds7j
      @user-zi8ce8ds7j 3 года назад

      @@frontendscience Спасибо!

  • @user-zt4cm5zx5k
    @user-zt4cm5zx5k 2 года назад +1

    из какого мультика улитка на 1 30?

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

      «Университет монстров».

  • @user-li7sm7ux2q
    @user-li7sm7ux2q 2 года назад

    Красно черные деревья))

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

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

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

    А можно еще попросить о python рассказать?

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

      Извините, я по Js.

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

      @@frontendscience хорошо. Спасибо, js мне тоже нужен. У вас самое понятное объяснение.

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

      Js и python похожи. Ты просто можешь адаптировать этот код под синтаксис python. Насколько знаю нужно просто по-другому массив назначить и убрать фигурные скобки

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

    че за имена? Шелдон Пени? это на сорта яблок больше похоже

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

    Алгоритм перестановки без повторений. Пример число 5 = 0000012345

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

    бинарный поиск это поиск строго по очереди от 0 до 100 допистим или может быть 25,14,15,3...????

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

      тільки для відсортованих масивів

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

      Сказали же, строго отсортированный массив.

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

    А если массив не отсортированный?

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

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

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

      @@frontendscience Если выпадет на mid или искомый элемент справа отсортирован, то получится : )

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

    не проще L + R / 2 ?

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

      Число может оказаться не целым

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

      @@kalts_daniil Math.floor((l + r)/2)

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

    Да но массив данных должен быть отсортированным.

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

      Да должен быть!

    • @user-cg1pq2kh6t
      @user-cg1pq2kh6t Год назад

      @@frontendscience сортируем пущырьком и получаем O(n2) :D

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

    ((right - left)/ 2) + left. С какой целью left прибавляем в конце ?

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

      я просто прописываю Math.floor((right+left)/2) и все работает!! и в let right = array.length (без -1). Может как-то влияет, конечно, но работает)

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

      Чтобы в случае, если левый и правый указатели одновременно указывали на искомое число программа не уходила в бесконечный цикл

    • @plan-4D
      @plan-4D Год назад +11

      left прибавляется, чтобы сдвинуть область поиска к начальной точки left.
      Т.е., если у тебя left 50, а right 100, то (100-50)/2 = 25, а нам нужна область с 50 до 100.
      Прибавляя к 25 50, получаем 75, что является искомой серединой отрезка left 50 - right 100.

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

      Чисто математически ((right - left)/ 2) + left это то же самое, что и (right + left)/ 2
      Но в программировании есть свои ньюансы, поэтому лучше употреблять первое выражение. можно конечно употребить второе, но только если Вы точно уверены, что оно сработает правильно. А оно не всегда может сработать правильно, ибо есть такая штука как переполнение.