Приятель, курс как ты и сказал, не для начинающих, как по мне ты прилагаешь слишком много усилий)). Все понятно, все изи с такой шикарной презентацией. Keep calm)
Если бы в каждом университете в мире объясняли бы всё как ты, то программистов было бы больше...но нет, нужно же мудрить. Спасибо за твои видео на ютубе )
В комментах выше люди пишут, что не находит 10. Для того чтобы нормально работало, надо сделать return str(mid) просто если mid = 0 , то он равен False (0 == False) В самой функции нет ошибок, она индекс находит как надо И кстати, спасибо за урок, презентация максимально понятная
Небольшая ошибка в коде( если уже писали простите нет времени перечитывать все комментарии) Если писать так как вы написали то число которое больше значения mylist[stop] (начального) - будет бесконечная рекурсия. (точнее до ограничения вложенности) - Вариант исправления. def bin_find(lst: list, find, start, stop): if start == stop: return False else: midl = (start + stop) // 2 if lst[midl] == find: return midl elif find < lst[midl]: return bin_find(lst, find, start=start, stop=midl - 1) else: return bin_find(lst, find, start=midl + 1, stop=stop) lout = [1, 2, 3] print(bin_find(lout, 22, 0, len(lout))))
А ещё алгоритм бинано-двоичного поиска бажный до жутиков. 1) Если написать в поиск первый элемент - 10, то он его не найдёт 2) Если написать в поиск скажем - 9 или 82, то он улетит в бесконечную рекурсию. Ыыыть 😊
stop в коде необходимо ставить len(mylist)-1, как ты показывал в презентации, т.е. последний индекс. Если оставить len(mylist) и поиск числа больше, чем самое большое, тогда ошибка.
Всем комментаторам кто возможно еще посмотрит это видео. Т.к. в python 0 == False, лучше в случае неудачи возвращайте string и делайте проверку на него. Например: if isinstance(result, int):
А правильно-ли называть питоновские списки массивами, ведь для реализации именно такой структуры данных, как массив, есть даже отдельный модуль или я что-то путаю?
Помимо того, что он не находит нулевой элемент думаю, важным будет отметить, что в массиве может находиться более одного числа с одним и тем же значением
Скажите, пожалуйста, немного не ясно, как программа понимает, что индекс Х ==20, ведь мы нашли ее, искомое значение у нас равно start = stop = mid, но x= binarysearch(myList, iskat, start,stop), как цифра 20 помещается в индекс Х, эту систему не понял((
Проверил Блин у меня тоже самое, нашел несколько других вариантов алгоритма в разных умных книгах и во всех 0-ой элемент не находит, при этом про это ничего не сказано в самих книгах.
Ну, в таком случае, если когда-нибудь на собеседовании спросят про такой алгоритм, скажу, что он мне не нравится из-за этого недостатка :) Это тоже демонстрация знаний в какой-то мере, я думаю. А вообще, как найду время нужно будет разобраться с этим, уверен что можно исправить. В любом случае, спасибо за уроки, на мой взгляд самые полезные из тех, что нашёл на Python!)
Все правильно, потому что для питона 0 == False. Желательно, если элемент не найден возвращать не False (что кстати, не очень правильно, поскольку желательно, чтобы функция возвращала результат одного типа), а например, -1 (поскольку функция поиска всегда будет возвращать положительный индекс, либо 0, если найден первый элемент). И в обработке результатов сравнивать результат с -1 (if x == -1:).
Вы скорее всего абсолютно правы. False в функции и в if-e внизу сменил на любимое автором 'herota' и всё заработало. Скорее всего именно из-за индекса 0 выдаёт False и говорит что не нашел
Когда пытаюсь найти 10 - выводит то, что его нет в списке. Я так и не понял, как исправить, может кто подскажет? number = int(input("Введите, какое значение в списке вы хотели найти: ")) def binary_search(your_list, item, start, stop): if start > stop: return False mid = (start + stop) // 2 if item == your_list[mid]: return mid elif item < your_list[mid]: return binary_search(your_list, item, start, mid - 1) else: return binary_search(your_list, item, mid + 1, stop) mylist = [10, 12, 13, 15, 20, 24, 27, 33, 42, 51, 57, 68, 70, 77, 79, 81] start = 0 stop = len(mylist) x = binary_search(mylist, number, start, stop) if x == False: print("Item", number, "not found!") else: print("Item", number, "found at index ", x)
уже неактуально, но отвечу, мало ли кто тоже захочет узнать я ввел в программу if 0 == False: print(" неожиданно ") в общем False равен нулю, поэтому у тебя 10 хоть и нашлось(можно вывести значение функции), но оно попало под 1 условие, выводящее 'not found' Чтобы не было проблемы , надо выводить из функции str(mid) , а не mid
а как код работал если там ошибка? у меня рекурсия уходила в бесконечность пока ограничитель не ввел. А вообще спасибо ошибка даже помогла лучше понять.
Можно так: def binarSort(myList, var): f =int(len(myList)//2) if var==myList[f]: return var elif var < myList[f]: return binarSort(myList[:f], var) else: return binarSort(myList[f:], var)
Спасибо большое! Наконец токи понял как работает этот алгоритм! P.S. в этом алгоритме есть небольшой изъян, дело в том что он НЕ находит "item" под индексом 0. Что-бы все работало, надо немного изменить самые нижние строки кода (точнее, добавить две строки), на вот эти: -->>if search == mylist[0]: print("Item", search, "found at index:", mylist.index(search))
Автору респект, продолжай дальше, просто супер объясняешь. Да у меня когда проверял найти 10, 0 элемент, то функция возвращает 0 и при сравнении 0 == False возвращает true и выполняется услови я и выводить результат, что не найдено. Я исправил где проверка if start > stop: return -1 И мы получаем (-1) и там сравниваем с -1 в случае если не найдено. Что бы не было логической ошибки.
Лол, а в чем кек? разве рекурсия не засоряет память, и смысл искать в отсортированном списке, веть проще и как понимаю быстрее пробежаться for? или что-то я не вкурил? просто как не то)
Ну так а на кой хер? если то проще и быстрее? то есть на собеседование додики?или типо ты написал что-то подобное и у тебя есть типо скил по их мнению?
чувак, просто пробежаться for займет n линейного времени, а двоичный поиск это обычно натуральный лог от н. Посмотрю я на тебя, как ты будешь линейным поиском искать число, которое попало в конец списка из более чем миллиона обьектов.
Привет, алгоритм крут, но вот по пямяти он весьма прожорлев... Каждый раз уходя в рекурсию передаётся список полностью, а что если список длинной несколько тысяч элементов, и там данные не цифры а что ни будь тяжёлое., можно передавать в рекурсию только часть списка, тем самым сократить вразы потребляемую память, правда нужно будет отслеживать направление поиска. И если я не ошибаюсь возвращать рекомендуется одного типа, а то получается нашли число вернули ин-т, не нашли вернули bool ..
Приятель, курс как ты и сказал, не для начинающих, как по мне ты прилагаешь слишком много усилий)). Все понятно, все изи с такой шикарной презентацией. Keep calm)
Спасибо!
Если бы в каждом университете в мире объясняли бы всё как ты, то программистов было бы больше...но нет, нужно же мудрить. Спасибо за твои видео на ютубе )
Спасибо!
В комментах выше люди пишут, что не находит 10. Для того чтобы нормально работало, надо сделать return str(mid)
просто если mid = 0 , то он равен False (0 == False)
В самой функции нет ошибок, она индекс находит как надо
И кстати, спасибо за урок, презентация максимально понятная
интересный подход с использованием функции у тебя . молодец!
прошло столько времени, ты до сих пор обучаешь людей ( меня )
Всё еще стараюсь делится нужными знаниями и менять жизнь других людей
Объяснение куда лучше, чем в платных курсах
Как всегда топ, решил начать изучать алгоритмы. Твоя простая подача, для новичков как я самое то
Благодарю за видео, очень продуктивно
Очень хорошо пояснил
я смотрел много видео про пайтон но ты сто процентов обесняешь каким то магическим образом все просто и сразу понятно
Спасибо за видеоурок, было очень приятно 👍👍👍 аж не могу оторваться
Вас показывали в нашей школе, очень хороший урок , такая сложная тема объяснена такими лёгкими словами.
Да , в нашей тоже показывали.
Да,у нас тоже показывали,было интересно!
Ребята, может быть у нас одна школа? 🤔
@@redcomrade7076 Вау,вот это совпадение.Я в шоке.Насколько тесен мир
@@sorrowfulwolf9987 Хм,сомневаюсь,я из Чебоксар
Небольшая ошибка в коде( если уже писали простите нет времени перечитывать все комментарии)
Если писать так как вы написали то число которое больше значения mylist[stop] (начального) - будет бесконечная рекурсия. (точнее до ограничения вложенности) - Вариант исправления.
def bin_find(lst: list, find, start, stop):
if start == stop:
return False
else:
midl = (start + stop) // 2
if lst[midl] == find:
return midl
elif find < lst[midl]:
return bin_find(lst, find, start=start, stop=midl - 1)
else:
return bin_find(lst, find, start=midl + 1, stop=stop)
lout = [1, 2, 3]
print(bin_find(lout, 22, 0, len(lout))))
Спасибо огромное. По видео быстрее получается разобраться, чем по книге. + доступным языком все рассказано.
stop должен быть равен len(list) - 1
Благодаря Вам я нашёл ошибку в своём коде :) Благодарю за подробное изложение!
Рад слышать!
очень спасибо. доступно и легко. респект!
Большое спасибо вам за ваш обучающий контент
Отличные уроки , друг - спасибо за труд. Продолжай.
Всё отлично и понятно, только меньше нервов
11:06 бро, у тебя получилось🤝
Огромное спасибо, всё чётко и понятно 👍👍👍
Чувак, это все очень круто. Спасибо.
Не искало многие элементы, по итогу немного дополнил код и теперь ищет всё.
massiv = [1,2,3,5,6,7,9,12,65]
iskat = input("ENTER ")
iskat = int(iskat)
start = 0
stop = len(massiv) - 1
def bSearch(massiv, iskat, start, stop):
if start > stop:
return -1
else:
mid = (start + stop) // 2
print(mid)
if iskat == massiv[mid]:
return mid
elif iskat < massiv[mid]:
stop = mid
return bSearch(massiv, iskat, start, stop)
else:
start = mid
return bSearch(massiv, iskat, start, stop)
x = bSearch(massiv, iskat, start, stop)
if x == -1:
print("NOT FOUND")
else:
print("FOUND ON ", x)
Автор - Большое тебе СПАСИБО!!!
зануда mode on. 33 - не цифра :) зануда mode off. В целом, интересно, спасибо за материал!
Всё просто и понятно, спасибо автору :)
Отличная подача, спасибо
А ещё алгоритм бинано-двоичного поиска бажный до жутиков.
1) Если написать в поиск первый элемент - 10, то он его не найдёт
2) Если написать в поиск скажем - 9 или 82, то он улетит в бесконечную рекурсию.
Ыыыть 😊
принты вместо ретурна делаешь и находит
1) if x == False замени на if x is False:
2) len(mylist) замени на len(mylist) - 1
stop в коде необходимо ставить len(mylist)-1, как ты показывал в презентации, т.е. последний индекс. Если оставить len(mylist) и поиск числа больше, чем самое большое, тогда ошибка.
Я тоже заметил
Спасибо, хорошо рассказываете
спасибо большое за ваш труд!!
Красава!Спасибо! Продолжай дальше!
четко
Всем комментаторам кто возможно еще посмотрит это видео. Т.к. в python 0 == False, лучше в случае неудачи возвращайте string и делайте проверку на него. Например: if isinstance(result, int):
друг - спасибо за труд
Рад помочь
Спасибо за уроки! будут ли уроке по сортировке и использованию многофайловых проектов?
Спасибо
2:07 Офигеть просто. Смотрел ночью один дома с наушником. Чуть не обосрался, ептвоюж...
Сорри :)
классная презентация , суть уловил двоичный поиск работает за линейное время деленое на 2?!)
А правильно-ли называть питоновские списки массивами, ведь для реализации именно такой структуры данных, как массив, есть даже отдельный модуль или я что-то путаю?
спасибо, круто обьясняеш
Спасибо!
Можно делать до пока start != stop именно по индексу и если это вещ числа то ввести eps примерно 10 ** -9
А почему нельзя просто проверить
print(number in list)?!
Можно конечно, сортировка тоже одной функией работает.
Это урок про алгоритм поиска. Часто на интервью спрашивают
Помимо того, что он не находит нулевой элемент думаю, важным будет отметить, что в массиве может находиться более одного числа с одним и тем же
значением
Бинарный-Двоичный Поиск работает только в отсортированном массиве и находит первое искомое значение.
Большое спасибо, отличные уроки, будут ли уроки по Django?
Надо самому еще с django разобраться
Такой код не находит число 10, хотя он есть в массиве(
если попробовать число 10 то выдаст not found
if iskat == mylist[mid]:
return zashibis
Очень странный thumbnail... Зачем kali linux и откуда в UNIX системе указывается путь с помощью ':'? Выглядит как-то странно
stop = len(mylist) -1 должно быть
Скажи , есть возможность создать лист, так чтобы в рекурсии он не создавался каждый раз?
лист как глобальную переменную сделай
Почему ты не используешь f строки для вывода удобно ведь
у меня почему то ошибка
def binsearch(mylist, poisk, start, stop):
if start > stop:
return False
else:
mid = (start + stop) // 2
if poisk == mylist[mid]:
return mid
elif poisk < mylist[mid]:
return binsearch(mylist, poisk, start, mid - 1)
else:
return binsearch(mylist, poisk, mid - 1, stop)
mylist = [18, 20, 22, 25, 30, 32, 35, 42, 46, 58, 65, 85, 95, 100, 125, 140]
poisk = 35
start = 0
stop = len(mylist)
x = binsearch(mylist, poisk, start, stop)
if x == False:
print("item" + poisk + "not found")
else:
print("item" + poisk + "in" + x)
у меня тоже ошибка, набрал все как в видео, вылетает десяток ошибок, у тебя получилось что то исправить???
Внимательно набирайте текст, в функции print(аргумент, аргумент,) в данном случае разделено с помощь запятых, а не +.
str()
вот та балбес, отдаешь длину массива как стоп, которая на единицу получается больше последнего индекса
ADV-IT в будет ли такой курс по СИ?
Неа, по СИ точно делать не буду, в принципе главное понять сам алгоритм а написать его на любом языке уже не так сложно
Скажите, пожалуйста, немного не ясно, как программа понимает, что индекс Х ==20, ведь мы нашли ее, искомое значение у нас равно start = stop = mid, но x= binarysearch(myList, iskat, start,stop), как цифра 20 помещается в индекс Х, эту систему не понял((
iskat = 20 , x - это индекс
Узнать есть ли элемент в массиве:
>> mylist = [23,412,21]
>> 23 in mylist
>>True
А теперь вопрос на интервью, напиши алгоритм этого поиска....
Странно, но у меня данная программа не ищет 0-й элемент массива, выдаёт Not Found! Пытаюсь найти ошибку.
Проверил Блин у меня тоже самое, нашел несколько других вариантов алгоритма в разных умных книгах и во всех 0-ой элемент не находит, при этом про это ничего не сказано в самих книгах.
Ну, в таком случае, если когда-нибудь на собеседовании спросят про такой алгоритм, скажу, что он мне не нравится из-за этого недостатка :) Это тоже демонстрация знаний в какой-то мере, я думаю. А вообще, как найду время нужно будет разобраться с этим, уверен что можно исправить. В любом случае, спасибо за уроки, на мой взгляд самые полезные из тех, что нашёл на Python!)
Все правильно, потому что для питона 0 == False. Желательно, если элемент не найден возвращать не False (что кстати, не очень правильно, поскольку желательно, чтобы функция возвращала результат одного типа), а например, -1 (поскольку функция поиска всегда будет возвращать положительный индекс, либо 0, если найден первый элемент). И в обработке результатов сравнивать результат с -1 (if x == -1:).
Это не вопрос алгоритма, а того, как он написан и на чем (в данном случае важно как).
Вы скорее всего абсолютно правы. False в функции и в if-e внизу сменил на любимое автором 'herota' и всё заработало. Скорее всего именно из-за индекса 0 выдаёт False и говорит что не нашел
А если то что мы ищем лежит под нулевым индексом, тогда х станет равным 0, что аналогично х равно False, а значит поиск якобы не удался.
Когда пытаюсь найти 10 - выводит то, что его нет в списке. Я так и не понял, как исправить, может кто подскажет?
number = int(input("Введите, какое значение в списке вы хотели найти: "))
def binary_search(your_list, item, start, stop):
if start > stop:
return False
mid = (start + stop) // 2
if item == your_list[mid]:
return mid
elif item < your_list[mid]:
return binary_search(your_list, item, start, mid - 1)
else:
return binary_search(your_list, item, mid + 1, stop)
mylist = [10, 12, 13, 15, 20, 24, 27, 33, 42, 51, 57, 68, 70, 77, 79, 81]
start = 0
stop = len(mylist)
x = binary_search(mylist, number, start, stop)
if x == False:
print("Item", number, "not found!")
else:
print("Item", number, "found at index ", x)
уже неактуально, но отвечу, мало ли кто тоже захочет узнать
я ввел в программу
if 0 == False:
print(" неожиданно ")
в общем False равен нулю, поэтому у тебя 10 хоть и нашлось(можно вывести значение функции), но оно попало под 1 условие, выводящее 'not found'
Чтобы не было проблемы , надо выводить из функции str(mid) , а не mid
А если есть одинаковые цифры, массив считается отсортированным?
одинаковые числа не сортируются так они одинаковы, значит отсортированы
а как код работал если там ошибка? у меня рекурсия уходила в бесконечность пока ограничитель не ввел. А вообще спасибо ошибка даже помогла лучше понять.
muy bien!!!
А почему не для начинающих? Сам алгоритм простой, а для написания на питоне нужно знать функции, списки и условный оператор, что начинающий знает
Начинающим надо учить простые вещи как польщоваться питоном, а не алгоритмы
Можно так:
def binarSort(myList, var):
f =int(len(myList)//2)
if var==myList[f]:
return var
elif var < myList[f]:
return binarSort(myList[:f], var)
else:
return binarSort(myList[f:], var)
Как можно вывести значение последнего элемента массива?
mylist[len(mylist)-1]
Можно проще:
mylist[-1]
Спасибо большое! Наконец токи понял как работает этот алгоритм!
P.S. в этом алгоритме есть небольшой изъян, дело в том что он НЕ находит "item" под индексом 0. Что-бы все работало, надо немного изменить самые нижние строки кода (точнее, добавить две строки), на вот эти:
-->>if search == mylist[0]:
print("Item", search, "found at index:", mylist.index(search))
Вроде нормуль!
Чувак, у тебя ошибка 10:25 stop же равен mid-1 , а они на одной позиции. Да, суть не меняет, но всё же ошибка.
Не может найти первый индекс массива mylist[0] .
В конце вместо False напиши -1
слишком много эмоций, мешает, ты хорошо знаешь материал, зачем так нервничать, мы и так дослушаем.
Стараюсь
Автору респект, продолжай дальше, просто супер объясняешь. Да у меня когда проверял найти 10, 0 элемент, то функция возвращает 0 и при сравнении 0 == False возвращает true и выполняется услови я и выводить результат, что не найдено. Я исправил где проверка
if start > stop:
return -1
И мы получаем (-1) и там сравниваем с -1 в случае если не найдено. Что бы не было логической ошибки.
Лол, а в чем кек? разве рекурсия не засоряет память, и смысл искать в отсортированном списке, веть проще и как понимаю быстрее пробежаться for? или что-то я не вкурил? просто как не то)
Ну каждый выбирает сам как ему удобно, просто на собеседовании обычно спрашивают "напиши это да посложнее"
Ну так а на кой хер? если то проще и быстрее? то есть на собеседование додики?или типо ты написал что-то подобное и у тебя есть типо скил по их мнению?
На интервью обычно хотят вые#нутся типа они сами все алгоритмы знают и хотят чтобы ты тоже знал
Ну яж говорю какие-то додики) бессмысленно!
чувак, просто пробежаться for займет n линейного времени, а двоичный поиск это обычно натуральный лог от н. Посмотрю я на тебя, как ты будешь линейным поиском искать число, которое попало в конец списка из более чем миллиона обьектов.
Мацегет ? Ха!
Привет, алгоритм крут, но вот по пямяти он весьма прожорлев... Каждый раз уходя в рекурсию передаётся список полностью, а что если список длинной несколько тысяч элементов, и там данные не цифры а что ни будь тяжёлое., можно передавать в рекурсию только часть списка, тем самым сократить вразы потребляемую память, правда нужно будет отслеживать направление поиска. И если я не ошибаюсь возвращать рекомендуется одного типа, а то получается нашли число вернули ин-т, не нашли вернули bool ..
А если вот так?
def search(A, key):
for i in range(len(A)):
if A[i] == key:
return True
return i
return False
более ужасного преподнесения теории еще не было. "нафиг", "пофиг", "ээээ..." . УЖАС!
10 не находит
Со звуком проблемы
Да, я поздно заметил, через несколько уроков все исправил
А нафига вот это вот все если можно написать так:
print(mylist.index(20))
Это совсем разные вещи
Ораторские навыки у тебя чуть более чем полностью отсутствуют
За ораторскими навыками иди в Университет
Ты ещё больше меня запутал. Дизлайк
Спасибо за уроки! будут ли уроке по сортировке и использованию многофайловых проектов?
По сортировке будут
Спасибо!