Алгоритмы и Структуры Данных. Урок 10: Двоичный (Бинарный) поиск.

Поділитися
Вставка
  • Опубліковано 18 гру 2024

КОМЕНТАРІ • 131

  • @alishevN
    @alishevN  6 років тому +2

    КУРС ПО GIT: www.udemy.com/course/git-alishev/?referralCode=71994763964B8E2E6A4E

  • @alexey6754
    @alexey6754 5 років тому +41

    Отличные видео по алгоритмам, хотелось бы продолжение!

  • @nazerkegalymzhanova544
    @nazerkegalymzhanova544 4 роки тому +18

    СПАСИБО БОЛЬШОЕ!!! САМОЕ ГОДНОЕ ЧТО ЕСТЬ В ИНТЕРНЕТЕ! САМЫЙ КРУТОЙ КУРС ПО АЛГОРИТМАМ! ПОЖАЛУЙСТА ПРОДОЛЖИТЕ КУРС!!!!

  • @Viisijoki
    @Viisijoki 11 місяців тому

    Самое лучшее объяснение бинарного поиска которое я когда-либо слышал!

  • @janaschelle8377
    @janaschelle8377 3 роки тому +2

    Лучшее видео по бинарному поиску! Наконец поняла сложность! Спасибо!

  • @tortik1488
    @tortik1488 7 місяців тому +1

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

  • @homofaber1002
    @homofaber1002 Рік тому

    Смотрю этот курс и параллельно занимаюсь в N - Вы объясняете гораздо понятнее преподавателя из N. Спасибо за все Ваши курсы, смотрю с интересом.

  • @denistalko6585
    @denistalko6585 3 роки тому +2

    Наиль, спасибо вам огромное за ваши уроки! Очень интересные и полезные! Теперь буду изучать ваш курс по языку Python.

  • @andreeich7851
    @andreeich7851 3 роки тому +2

    Ждем продолжения)

  • @larissasavchenko4101
    @larissasavchenko4101 5 років тому +3

    Спасибо за уроки. Просто, понятно и интересно

  • @kotedo4943
    @kotedo4943 3 роки тому +1

    Ждем-с продолжения, отлично объясняешь.

  • @СалимовДарын
    @СалимовДарын 4 роки тому +2

    отличный курс, хотелось бы продолжение!

  • @ДмитрийКоликов-з7и
    @ДмитрийКоликов-з7и 3 роки тому +3

    Спасибо большое)) Марафон от Наиля прошел, продвинутую Java прошел, Spring прошел, теперь очередь алгоритмов))
    Люди пишут в комментариях можно ли упростить запись до (high + low) / 2;
    Я всегда люблю разбираться в коде, пока мне не станет понятно, почему так должно быть.
    Если мы возьмем ручку и бумагу, и сделаем все вычисления например число 20, как в примере Наиля при формуле (high + low) / 2; - будет 4 итерации, а если мы берем формулу low + (high - low) / 2; то будет 3 итерации, как и сказано при расчете логарифма.
    Я читаю книжку и смотрю дополнительно видео Наиля совмещаю два в одном, всем тоже рекомендую, лучше несколько источников открыть информации, сравнить и понять еще будет легче, но Наиль всегда объясняет на высоте))

    • @arktikmoon
      @arktikmoon 3 роки тому +3

      "Грокаем" -- в книге "Алгоритмы" хорошо объяснил как работает бинарный поиск, здесь увидел грамотно разложенную реализацию. Так что несколько источников это большой +. Согласен.

    • @Romverveter
      @Romverveter 3 роки тому +1

      Дело не в количестве итераций, а в том, что, если мы применим формулу (high + low) / 2, то мы можем выйти за границы int'a в случае, если оба слагаемых больше 10^30.

    • @ionelan_crypto
      @ionelan_crypto 3 роки тому +1

      если применить математику и раскрыть скобки, то вы увидите, что
      low + (high - low) / 2 = (high + low) / 2

  • @ПутьТрейдера-ж3к
    @ПутьТрейдера-ж3к 4 роки тому +3

    Очень доходчиво, спасибо!

  • @Сова32
    @Сова32 6 років тому +4

    компьютерные боги услышали меня, спасибо Наиль

  • @AsiaMotoJourney
    @AsiaMotoJourney 4 роки тому +3

    Боже, Алишев, ты просто топ

  • @john-doe-w9g
    @john-doe-w9g 6 років тому +4

    Спасибо большое! С нетерпением жду следующие видео по алгоритмам и структурам данных

    • @MsDima9999
      @MsDima9999 4 роки тому +2

      Максим Андреевич ну как ждёшь ещё?

    • @ruslanvolovik2745
      @ruslanvolovik2745 4 роки тому +1

      Еще ждешь?

    • @F1x_SerGo
      @F1x_SerGo 4 роки тому +1

      @@ruslanvolovik2745 дождался?)

    • @ruslanvolovik2745
      @ruslanvolovik2745 4 роки тому +1

      @@F1x_SerGo я не ждал, я просто у его спрашивал, я и так свои структуры писал на с++ да и не мало, и туда семафоры, мьютексы, дедлоки, конкурентные очереди, атомиксы, ф'ючеры... оно мне не нужно

    • @ruslanvolovik2745
      @ruslanvolovik2745 4 роки тому +1

      @@F1x_SerGo а ты дождался?)

  • @radmitr
    @radmitr 2 роки тому

    Спасибо большое! Ждём продолжения в 2022 году!

  • @ФедорЩербанюк-ц3к
    @ФедорЩербанюк-ц3к 2 роки тому

    СПАСИБО!!! ОСОБЕННО ЗА САМОСТОЯТЕЛЬНЫЕ ЗАДАЧИ!

  • @Грант1147
    @Грант1147 3 роки тому

    Спасибо большое за подробные и качественные объяснения

  • @gadjik_youtube
    @gadjik_youtube 2 роки тому

    офигенски объясняете , спасибо за видео !

  • @anolangus
    @anolangus 4 роки тому +1

    Отличное объяснение!!!

  • @Ivans_pro
    @Ivans_pro 3 роки тому +4

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

  • @halcyon-s
    @halcyon-s Рік тому

    Большое спасибо за урок!

  • @andriihalashevskyi5324
    @andriihalashevskyi5324 5 років тому +5

    Можно улучшить алгоритм двоичного поиска на 10-й минуте. В первой итерации мы сравниваем число в массиве(16), а затем если оно не равно - оставляем почему то его в следущем массиве. Из-за этого итераций больше.

    • @georgegevorgyan9412
      @georgegevorgyan9412 3 роки тому

      не можно, а нужно. Поскольку индекс мида больше индекса 13-ти, то мид отбрасывается тоже. Автор ошибся

  • @Bushido_Cat
    @Bushido_Cat 2 роки тому

    все очень понятно спсибо болльшое за уроки !!

  • @Zartem2001
    @Zartem2001 11 місяців тому

    Добрый день! Замечательное видео, стало все понятно после просмотра. Прошу подсказать разницу в написание следующей строки. В чем разница ""int middle = (left + right) / 2"" и ""int middle = low + (high - low) / 2""

  • @ДенисКрылов-л3х
    @ДенисКрылов-л3х 2 роки тому

    спасибо за видео, очень доступно

  • @vladislavarzamastsev7026
    @vladislavarzamastsev7026 3 роки тому +3

    А будет ли продолжение? Очень уж курс хороший, жалко, если забросите))

  • @menaryt0000
    @menaryt0000 2 роки тому +1

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

  • @johncarter494
    @johncarter494 3 роки тому +1

    Наиль здравствуйте, а будет продолжение? И спасибо за урок)

  • @rushannasakhapova1282
    @rushannasakhapova1282 6 років тому +6

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

    • @alishevN
      @alishevN  6 років тому +5

      Здравствуйте, Рушанна!
      Да, будет.

    • @ruslanvolovik2745
      @ruslanvolovik2745 4 роки тому +5

      Здравствуйте, Рушанна!
      Конечно же нет

    • @ruslanvolovik2745
      @ruslanvolovik2745 4 роки тому

      @@ministryNoiz еще ждешь?

    • @ruslanvolovik2745
      @ruslanvolovik2745 4 роки тому

      @@ministryNoiz я в шоке 😱
      Надеюсь обьяснять не придется

    • @Werqyious
      @Werqyious 3 роки тому +3

      Прошел еще один год

  • @XFNeoful
    @XFNeoful 5 років тому +8

    public static int binarySearch(int[] sortedArray, int key, int low, int high){
    int mid = low + (high - low) / 2;
    if (low > high ) return -1;
    if (key < sortedArray[mid]) return binarySearch(sortedArray, key, low, mid -1);
    else if (key > sortedArray[mid]) return binarySearch(sortedArray, key, mid + 1, high);
    else return mid;
    }

    • @uncle_bagdan
      @uncle_bagdan 4 місяці тому

      ChatGPT подсказал, что лучше base case поставить перед вычислением mid, чтобы не выполнять лишнее вычисление (видимо)

  • @estupidoParapente
    @estupidoParapente Рік тому

    Отличный материал для чайников, то что мне нужно. Не понял одного про бинарный поиск:
    если у нас к-во элементов в массиве нечетное, то формула нахождения середины (high + low) / 2 не будет работать, т.к. не даст целого числа для определения индекса середины массива.
    Странно, что автор не упомянул про это.

  • @MuratFatykhov
    @MuratFatykhov Рік тому

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

  • @faust374
    @faust374 6 років тому +1

    Здравствуйте, очень хотелось бы увидеть Spring, а вообще, большое спасибо за уроки и объяснения, хотелось бы по возможности больше роликов, уверен это будет круто и полезно что зрителям, что вам, сабскрайберов добавится однозначно... Спасибо еще раз!

    • @alishevN
      @alishevN  6 років тому +2

      Спасибо!
      Spring хочу начать записывать скоро.

  • @КириллАбрамов-ъ4п
    @КириллАбрамов-ъ4п 6 років тому +1

    Отличное видео

  • @ionelan_crypto
    @ionelan_crypto 3 роки тому +1

    а как же сложность сортировки? т.е. если мы имеем дело с неотсортированным массивом, то нам сначала нужно его отсортировать, а уж потом искать в нем бинарным поиском. А это уже сложность (применяя алгоритм быстрой сортировки или сортировки слияния) O(n*log(n)) ... а это уже больше чем O(n).
    Получается, что если нам дан не отсортированный массив, то для поиска нужно применять линейный поиск?

    • @daniildp1746
      @daniildp1746 3 роки тому

      Ты абсолютно прав.
      Методом простого перебора я среди миллиарда чисел нужно нашёл почти в 5 раз быстрее.
      Но помни, что тебе в любой другой момент написания программы может понадобится, например 1827412 элемент упорядоченного массива, и чтобы заново его не искать, можно сразу упорядочить элементы

  • @abnormal_type
    @abnormal_type 4 роки тому +3

    будет продолжение? как было сказано "изучим в этом курче"?

  • @Игорь-з7о1м
    @Игорь-з7о1м 2 роки тому

    А можно преобразовать формулу нахождения среднего в такую: (low+high)/2 ? Её никогда не приводят в уроках, может есть подвох в целочисленном делении?

    • @ViktorAr2023
      @ViktorAr2023 Рік тому

      вроде как в грохаем алгортмы такая)

    • @Игорь-з7о1м
      @Игорь-з7о1м Рік тому

      @@ViktorAr2023 В общем, если использовать эту формулу то может случится переполнение при сложении. Поэтому используют low+(high-low)/2.

    • @ViktorAr2023
      @ViktorAr2023 Рік тому

      @@Игорь-з7о1м Arrays.binarySearch() )) в языке уже написано все, принципе и норм

  • @sergeys4302
    @sergeys4302 6 років тому +2

    Здравствуйте. Очень приятно смотреть ваши уроки. Но что то мне немного не понятно. В начале видео стояла задача определить индекс заданного элемента в неотсортированной последовательности, а бинарный поиск находит определенный элемент в отсортированной последовательности, это немного разные задачи. Если мы хотим применить бинарный поиск применить к первой задаче, необходимо вводить второй массив для индексов и сортировать первый, а это уже другая сложность алгоритма, большая О(n). Или я ошибаюсь??? Заранее спасибо за ответ .

    • @alishevN
      @alishevN  6 років тому +14

      Здравствуйте!
      Видимо я недостаточно понятно этот момент объяснил.
      Задача стоит найти элемент в массиве. Неважно, отсортированный он или нет. Конечно чаще всего, в реальной жизни, массив бывает не отсортированным. Для того, чтобы ускорить поиск, мы этот массив сортируем. И конечно на сортировку мы должны задействовать вычислительные ресурсы (сложность сортировки O(N*log(N)).
      Но зато, благодаря сортировке (которая происходит один раз), мы теперь можем каждый раз находить элемент в массиве не за O(N), а за O(log(N)).
      Еще раз замечу: алгоритм двоичного поиска выгодно использовать только в том случае, если мы собираемся часто искать индекс элемента в этом массиве. Тогда начальная плата за сортировку O(N*log(N)) будет стоить того, чтобы потом очень быстро находить индекс элемента в отсортированном массиве. Если же нам надо только один раз найти индекс элемента в массиве, то выгодней просто пройтись по нему за O(N).

    • @AndrulisTravel
      @AndrulisTravel 4 роки тому +1

      @@alishevN Spasibo, vot etot moment ocen vazen, kak ras tokoj vapros u menia byl.

    • @ruslanvolovik2745
      @ruslanvolovik2745 4 роки тому

      Простое как 2 бита

  • @bulsond
    @bulsond 6 років тому +3

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

  • @Andrzej3935
    @Andrzej3935 3 роки тому

    Спасибо огромное!

  • @AkhraAvidzba
    @AkhraAvidzba Рік тому +1

    Очень жаль, что нет продолжения курса, но та часть, что есть уже очень хороша, спасибо! Единственный вопрос со сложностью, согласен что осуществлять бинарный поиск гораздо быстрее, но он ведь работает только в отсортированном массиве. Получается что если у нас есть не отсортированный массив в котором нужно найти значение, нужно его сначала отсортировать. В итоге получаем сложность сортировки массива n*log(n) и после сортировки бинарный поиск у которого сложность log(n), так как n*log(n) хуже чем log(n) получаем конечную сложность этого алгоритма n*log(n), что ощутимо дольше при больших объемах данных чем поиск значения в не отсортированном массиве сложность которого равна О(n) и лучше в таких случаях использовать классический линейный поиск в не отсортированном массиве. Но конечно все еще зависит от того как дальше будут использоваться эти данные

  • @alexshepelev2911
    @alexshepelev2911 4 роки тому +1

    благодарю

  • @expert7596
    @expert7596 5 років тому +4

    В формуле, если упростить выражение получится (2Low +High - Low)/2 =>
    ( Low + High)/2 . Так и не понял зачем такую формулу писать .

    • @alishevN
      @alishevN  5 років тому +1

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

    • @expert7596
      @expert7596 5 років тому +1

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

  • @ДимасЯкушев-з8и
    @ДимасЯкушев-з8и 2 роки тому +1

    только проблема в том, что сам массив обычно приходит неотсортированным. А сложность его сортировки N * log(N). Соответственно, суммарная сложность будет N * log(N) + log(N) ~ N * log(N)

  • @ViamF
    @ViamF 2 роки тому

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

    • @vadym_zakusylo
      @vadym_zakusylo 2 роки тому

      Скорее всего вы ответ уже знаете)) Но для тех, кто также задастся этим вопросом, то класс String имплементирует интерфейс Comparable, соответственно для сравниния нужно вызывать метод compareTo

  • @anttheant2020
    @anttheant2020 3 роки тому +1

    10:24 зачем число 16 в новый подмассив включать, если точно знаем, что это не 13?

    • @ionelan_crypto
      @ionelan_crypto 3 роки тому

      не нужно и в реализации, которая приводится далее 16 не будет включено.

  • @yanamakogon2891
    @yanamakogon2891 4 роки тому

    на минуте 5:19 ошибка на слайде. Там должно быть наоборот если к больше то смотрим правый подмассив, если к меньше то смотрим левый.

    • @user-kuzya2023
      @user-kuzya2023 2 роки тому

      "смотрим число в центре" Оно больше k ?

  • @mikegemini9503
    @mikegemini9503 2 роки тому

    Ну а время на сортировку массива?

  • @РоманКалюев
    @РоманКалюев Рік тому

    Подскажите почему int high - a.length - 1? Почему именно -1?

    • @supportreport7232
      @supportreport7232 Рік тому

      потому что индексирование начинается с 0, и не может быть меньше

  • @curtisaxel4291
    @curtisaxel4291 6 років тому +2

    Здравствуйте, Наиль.
    Всё хочу узнать, как там дела с курсом по Spring-у ?

    • @edrhbfdrtng54r
      @edrhbfdrtng54r 6 років тому

      Присоединяюсь к данному оратору

    • @curtisaxel4291
      @curtisaxel4291 6 років тому

      Я кстати только-что купил курс "продвинутая java" от Наиля на udemy, думаю, оно того стоит. Но опять же очень жду Spring :)

    • @MsDima9999
      @MsDima9999 4 роки тому

      Ждёте?

    • @ruslanvolovik2745
      @ruslanvolovik2745 4 роки тому

      @@curtisaxel4291 еще ждешь?

  • @vostangevorgyan9842
    @vostangevorgyan9842 2 роки тому

    А где продолжение курса? Хотя бы платный

  • @ttop1ttop145
    @ttop1ttop145 3 роки тому +9

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

    • @АлишерТоктомушев-щ7л
      @АлишерТоктомушев-щ7л 2 роки тому

      Да а что делать я начал изучать по этому каналу дальше продолжении нет я в тупике

    • @newcomer3419
      @newcomer3419 2 роки тому

      @@АлишерТоктомушев-щ7л Купи книжку "Грокаем Алгоритмы" Или еще лучше, я ее на днях перепроходить буду можешь добавиться в дискорде - МОЖЕМ ПАВТАРИТЬ!111!!#2257 Обычно я переписываю в цеттеле все конспекты, и буду переписывать темы из книги, сможем обсудить и порешать представленные там задачки.

    • @АлишерТоктомушев-щ7л
      @АлишерТоктомушев-щ7л 2 роки тому

      @@newcomer3419 у тебя какой уровень джава

    • @newcomer3419
      @newcomer3419 2 роки тому

      @@АлишерТоктомушев-щ7л Я не знаю как это замерить) Вообще прошел курс наиля на юдеми, сейчас вот перепройду книжку, затем java ee и за андроид разработку возьмусь, еще котлин нужен будет.

    • @АлишерТоктомушев-щ7л
      @АлишерТоктомушев-щ7л 2 роки тому

      @@newcomer3419 база данных не будешь учить?я тоже хочу купить курс на юдеми

  • @paradiesd
    @paradiesd 2 роки тому

    а если нужно изначальный индекс найти, не отсортированный

  • @yanamakogon2891
    @yanamakogon2891 4 роки тому +1

    А будет продолжение?

    • @alishevN
      @alishevN  4 роки тому

      Вообще планирую, но не в ближайшем будущем.

    • @focusproductionarts
      @focusproductionarts 4 роки тому

      @@alishevN жаль (

  • @danielbor8
    @danielbor8 5 років тому

    спасибо помогло !

  • @sergeys4302
    @sergeys4302 6 років тому +1

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

  • @DeathFreak3
    @DeathFreak3 3 роки тому

    Рекурсивное решение от новичка:
    public static int binarySearch (int[] arr, int number, int low, int high){
    int middle=0;
    middle=low+(high-low)/2;
    if (number==arr[middle]){
    return middle;
    } else if (low==high){
    return -1;
    }else if (numberarr[middle]){
    return binarySearch(arr,number,middle+1,high);
    } else
    return middle;
    }

  • @n0lor
    @n0lor 6 років тому +3

    хорошее видео, я бы порекомендовал еще книжку "Грокаем алгоритмы" я ее проглатил за обе щеки за 3 вечера и самое главное, в моей тупой голове даже что-то отложилось

  • @rifatkhalikov4502
    @rifatkhalikov4502 6 років тому

    Ура!!!

  • @kraewwwedful
    @kraewwwedful 4 роки тому

    ❤❤❤❤

  • @DimarikCanada
    @DimarikCanada 5 років тому +1

    Был бы признателен за видео о (Insertion/selection sort)

    • @ruslanvolovik2745
      @ruslanvolovik2745 4 роки тому

      Их полно в ютубе или тебе принципиально

  • @matrix-u1n
    @matrix-u1n 5 років тому

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

    • @qwerty6509
      @qwerty6509 4 роки тому

      Создай массив для этих клучов и с помощью цикла поставь эти ключи. Вот так 👇
      int[] keys = {3, 5, 7, 9};
      for (int i = 0; i < keys.length; i++)
      birnarySearch(здес массив, keys[i] );
      Примерно так. Дальше сам делай

  • @ssseoks
    @ssseoks 4 роки тому

    Чего бы не сделать еще и сортировку

    • @ruslanvolovik2745
      @ruslanvolovik2745 4 роки тому

      Чего бы не посмотреть других авторов

    • @ssseoks
      @ssseoks 4 роки тому

      @@ruslanvolovik2745 я что-то говорил про других авторов?

    • @ruslanvolovik2745
      @ruslanvolovik2745 4 роки тому

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

  • @PavelVashkevich
    @PavelVashkevich Рік тому

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

  • @fisyamaloy1754
    @fisyamaloy1754 4 роки тому +2

    Сама же сортировка долгая -_-

  • @eugenesmith9940
    @eugenesmith9940 Рік тому

    Жаль, что курс оказался незавершенным.

  • @hitpau
    @hitpau 4 роки тому

    Индексы начинаются с ноля!

    • @ruslanvolovik2745
      @ruslanvolovik2745 4 роки тому

      Наверно только узнал

    • @hitpau
      @hitpau 4 роки тому

      @@ruslanvolovik2745 ??

  • @VendetVen
    @VendetVen 2 роки тому

    буква мэ 🤣

  • @xatuky9644
    @xatuky9644 2 роки тому

    slui.exe