Бинарный (двоичный) поиск в языке C#
Vložit
- čas přidán 8. 06. 2021
- Поддержать канал
www.donationalerts.com/r/basi...
В этом видео вы узнаете, что такое бинарный поиск, в чем его преимущества и как его использовать в языке программирования C#
Приятного просмотра!
Игры, созданные мной
store.steampowered.com/search...
Мой инстаграм
/ basicsloth.games
Music from filmmusic.io
by Kevin MacLeod (incompetech.com)
License: CC BY (creativecommons.org/licenses/...)
#сишарп #бинарныйпоиск #двоичныйпоиск #программирование
ваау. Вот это объяснение! Даже не представить не могла, что так просто можно объяснить! Лайк и подписка!
Спасибо большое!)
Спасибо большое за видео! Очень сильно помогли!
Большое спасибо! Всё очень понятно
Спасибо за комментарий))
Славное объяснение. Спасибо.
Спасибо!)
Елена, спасибо! Как оказалось, не так всё сложно )
Спасибо!
Моё почтение. Вы лучшие!
Спасибо)
Однозначно лайк
Спасибо!
Хлопаю стоя!
Всё очень просто и понятно. Спасибо!
Я бы добавил проверку на попадание искомого числа в минимум и максимум,тогда число проверок сократится еще в 2 раза
Ну кстати да, хороший вариант, спасибо за дополнение)
2:20 в таком случае, начиная с массива из 129 элементов, у нас должно быть 8 итераций в поиске. Но почему 8 итераций начинаются только с 191 элемента?
Сейчас могу ошибаться, но, по-моему, где-то читала, что во всяких подобных алгоритмах вообще не важно точное количество итераций, особенно на малых количествах данных. То есть если алгоритм выполняется не за N итераций, где N - кол-во элементов, а за N-5, на массиве из 1млн. элементов разница будет не видна, поэтому говорят, что скорость алгоритма N. Всем понятно, что скорость N ниже, чем N/2, а эта ниже чем логарифм как в видео. Скорее нужно говорить стремится или не превышает, но так никто не делает, потому что скорость больше важна в сравнении и в больших масштабах
подписался из-за приятного женского голоса в мире программирования
Большое спасибо)
а почему мы отбрасываем только конечный член массива когда можем по половине убирать. Быстрее получится, или я не прав?
Все так, мы и убираем по половине массива. В каждой итерации мы берем массив, находим середину, сверяемся с искомым числом, а если не совпадает, сдвигаем граница массива (верхнюю или нижнюю, в зависимости от того больше или меньше наше число). Сдвинув прям на это число, на середину массива (переменная guess) мы уже сократим массив в два раза. Вас, вероятно, запутали строки guess - 1 и guess + 1. Это мы не на один элемент весь массив уменьшаем, это мы середину сдвигаем, потому что мы ее уже проверили, и ищем мы не ее, повторно ее обходить не нужно. Надеюсь, понятно объяснила, если нет, пересмотрите первую половину видео, где еще до кода объясняю
почему верхний предел массива (переменная high ) это длинна массива -1 а не просто длинна массива?
Потому что нумерация массива начинается с 0. То есть, если массив будет из одного элемента, то у последнего (и единственного) индекс будет 0. Если из 2, индекс последнего элемента 1. Из 3-ех - индекс 2 и т.д. То есть индекс последнего элемента всегда на 1 меньше длины
@@basicsloth а почему тогда при переборке циклом типа for мы указываем в цикле длину массива а не длину -1 ?
@@maxdenisenko3720 потому что там строго меньше длины массива, было бы меньше или равно было бы минус 1. А так фактически так и выходит, что до длины, до неё не доходит
@@basicsloth понял спасибо ))))
а как сделать то же самое, только масив будет рандомный (от 0 до 50, но числа разные и отсортированые по возростанию)
Если правильно поняла вопрос, то точно так же, в этом способе нет привязки к определенному количеству элементов, длина массива получается с помощью метода Length
@@basicsloth да , я знаю этот метод. У меня консоль сначала зависала, а сейчас бесконечно требует ввода числа в консоль(сделал код по видео, но числа разные, как я уже и говорил).
@@dark.babayka так сложно сказать, в чем может быть проблема. Может, где-то скобку потеряли или что-то вроде того. Я бы посоветовала переписать так как в видео, убедиться, что все работает, а потом по одному элементу менять
@@basicsloth переписал код из видео в отдельном проекте, проверил на ошибки, их не оказалось. консоль по прежнему зависает, и ничего не выдает
@@dark.babayka тогда могу посоветовать попытаться отловить момент, где что то работает не так. Попробуйте писать по частям код, выводить в консоль результаты каждого куска по отдельности, и так найти ошибку. Либо попробуйте вместо ввода в консоль задать число в коде, так получится отловить, где именно проблема в обработке значения из консоли или в остальном коде
Если с цифрами ясно, а как с именами то быть , здесь простое сравнение строк на больше меньше не подойдет
Можно посимвольно сравнивать строки, работая с ними как с массивами. Например , есть 2 строки a и b, если a[0]
Я чуть незахлебнулся от воды в видео, честно, на 1.5 скорости смотрел, все равно воды много
А что выводит guess?
Это индекс элемента массива, находящийся в середине. То есть индекс того числа, в которое в данный момент "тычет" наш поиск
А как посмотреть сколько шагов делает бинарный поиск?@@basicsloth
@@yur4k69 создать доп переменную типа инт и увеличивать ее при каждом выполнении цикла
Ошибки в коде, не нужные проверки. Используй правило KISS.
У тебя в первом же условии программа работает не верно.
В чем не верно?
Эти ненужные проверки в быту называются валидацией.
4:58 в строке int high идет обращение к последнему элементу массива, почему автор несет такую чепуху(уменьшенная на 1 длина массива) то есть это полное непонимание кода, зачем записывать обучающее видео если у автора нет понимания работы программы?
Ну а как рассчитывается последний элемент массива, если не как длина массива минус 1? Зачем кто-то пишет комментарии, если нет понимания того, о чем говорят?
guess = findThis - 10; \\ KISS