Спасибо за видео👍 Алгоритм быстрой сортировки хотелось бы увидеть)
@frontendscience3 жыл бұрын
Благодарю за фибдек. Отличный выбор :) запишем!
@mrivanan1013 жыл бұрын
Спасибо за видео! По поводу поиска среднего элемента. Долго думал, почему надо прибавлять позицию левого указателя. Потом понял, что (right - left) / 2 + left == (right + left) / 2, то есть старое доброе среднее арифметическое двух чисел. По-моему, со средним арифметическим гораздо проще понять
@alexr68293 жыл бұрын
Даешь алгоритм обхода бинарного дерева в глубину/ширину? или инвертирования того же дерева)! Кто за, ставим лайки!
@frontendscience3 жыл бұрын
Хорошая идея! До этого тоже дойдем. Но вначале прийдется разобраться с деревьями и бинарными деревьями в частности.
@ПавелМельничук-с4ш3 жыл бұрын
@@frontendscience 6 месяц как ждем!
@frontendscience3 жыл бұрын
@@ПавелМельничук-с4ш и в течение этих 6 месяцев для Вас лично прям ничего другого полезного не вышло на канале - вот сидите и ждете у компа все полгода.... грустненько.
@denisoleksyuk53463 жыл бұрын
Я бы хотел разобрать все самые известные алгоритмы, можно прям с книги грокаем алгоритмы, там и про графы, Дейкстры и т.д, можно было бы прям по 2-3 задачки на каждый алгоритм для закрепления
@frontendscience3 жыл бұрын
Алгоритмы и структуры данных уже начали - вот бинарный поиск первое из видео серии. В плейлисте с задачками - как раз сейчас задачи на бинарный поиск. Дальше будет много всего интересного.
@valeriivolkov_ua3 жыл бұрын
Блин, наверное первый раз с такой легкостью на сердце ставлю лайки в Ютубе под каждым просмотренным видосе на канале. Спасибо!
@frontendscience3 жыл бұрын
Круто! Очень приятно) благодарю за поддержку)
@timoshagoogle56783 жыл бұрын
шикарное видео, алгоритмы- это то, что нужно любому разработчику
@frontendscience3 жыл бұрын
Благодарим за поддержку. Дальше будет еще много полезного! Stay tuned
@olehy50003 жыл бұрын
Обожаю Ваш контент! Отличный материал! Спасибо за Ваш труд!
@frontendscience3 жыл бұрын
Очень приятно! Спасибо большое за поддержку! Это очень вдохновляет 😊🤩
@sergeiosokin3003 жыл бұрын
Спасибо за контент на вашем канале! Полезно!)
@frontendscience3 жыл бұрын
Благодарим за поддержку! Рады, что было полезно!
@ДмитрийЩ-у7д3 жыл бұрын
Сергей, спасибо громадное! В отличие от Владилена вы обучаете вглубь, а не тому как бы быстрее начать писать код и начать зарабатывать. Продолжайте в том же духе. Очень нужно и ценно.
@frontendscience3 жыл бұрын
Ценю Вашу поддержку! :) Я тоже за то, чтоб начинать писать код пораньше и получать опыт. Но в то же время наращивать глубину знаний. Потому что благодаря им будет качественное развитие как профессионала.
@sayko0033 жыл бұрын
Как будто пересказ книги 1 главы Грокаем Алгоритмы. Полезно будет для новичков. В книге описаны примеры на Python, а Сергей перевел их в JavaScript, спасибо! Хорошая работа.
@frontendscience3 жыл бұрын
Прикольно! Это что мне пора книгу писать?)
@mikagasparyan50293 жыл бұрын
@@frontendscience я бы посоветовал)
@rq9kd2 жыл бұрын
какая разница для какого языка примеры, когда математика одна для всех в мире
@multiply873 жыл бұрын
Красота. Пора учить алгоритмы)
@frontendscience3 жыл бұрын
Походу пора снимать новые видео)) Мотивируешь!
@multiply873 жыл бұрын
@@frontendscience буду только рад новым видео. Задачки всегда будут интересны) Ещё раз спасибо за твой труд
@GSySte3 жыл бұрын
Решал задачу на поиск из входного массива элемента, у которого индекс совпадает собственно, с самим числом. Банальная невнимательность не позволяла до конца понять, почему данный алгоритм так работает, если учесть, что задача требовала пройти тест на производительность. Конечно, решение всё-таки удалось отыскать, хоть и с применением рекурсии... Спустя 10-ки попыток, снова пересмотрел Ваше видео, всё встало на свои места. Ваш труд не останется в стороне. Браво и большое спасибо за объяснения!!
@frontendscience3 жыл бұрын
Благодарю, очень вдохновляет)
@JavaScript_0010 ай бұрын
Огромное спасибо! Очень ясно понятно, и самое главное видео не большое.
@soloviyshpak8 ай бұрын
респект за имена с теории большого взрыва 😊
@РоманГирич-з5ш2 жыл бұрын
классный видос, теперь буду знать как называется то что я применял )) спасибо
@АлександрШевченко-б1я9з3 жыл бұрын
Отличное видео! Было бы интересно увидеть бинарный поиск по дереву)
@frontendscience3 жыл бұрын
Как до деревьев дойдем - будет!
@userman61932 жыл бұрын
Хотелось бы больше о самих алгоритмах, поняв алгоритм, лучше самому их реализовывать). Спасибо. Вот приятный канал!)
@colemanphonecolemanphone33873 жыл бұрын
Очень полезный материал. Так бы все по одному алгоритму разобрать. Быстро и доходчиво
@frontendscience3 жыл бұрын
Рад, что понравилось! Да, такое есть в планах.)
@suginikaiasarux2 жыл бұрын
Лайк за Теорию Большого Взрыва)
@ІльченкоАртем3 жыл бұрын
Наверное вся жизнь построена на бинарном поиске (как говорится: вселенная стремится к балансу ) где left и right - крайности а mid - это то самый баланс) Нам хорошо когда ми в этом балансе. Если в духовном плане (баланс) это спокойствие. Спокойствие это когда мы не слишком угрюмые и не слишком эмоциональные(например что бы уснуть нам нужно спокойствие- мы не уснем когда будем слишком радостные или наоборот переживать за что то) Если в лечении болезни например то лекарство от яда отличается дозой. Если его мало(left) - нет смыла, если много(right) - вред для организма и тут нам нужен 3-й указатель - mid, также можно наводить еще много примеров где бинарный поиск будет актуальным) спасибо что дочитали это до конца)) Хотя у меня куча крутых каналов в подписках но Ваш в топе)
@frontendscience3 жыл бұрын
Интересная аналогия)
@АртемВ-ш7щ2 жыл бұрын
Доступнее, чем в книгах.
@-anonim-30082 жыл бұрын
Спасибо огромное! Не думал, что за 6 минут можно легко выучить бинарный поиск. Я сначала середины рассчитывал как (right+left)/2 - но из-за этого получалось на 1 итерацию больше. Упростил ваше выражение, получилось right-3*left;
@ПетрПетров-ж9е Жыл бұрын
Чтобы уменьшить итерации сделай проверку, 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
@cardinalerror13 жыл бұрын
Нажал лайк, колокольчик на все уведомления!
@maksimmnatsakanov28533 жыл бұрын
Спасибо за видео. Я скидывал задачу на почту, хотелось бы её разбор увидеть:)
@frontendscience3 жыл бұрын
Рад что понравилось. Задача отличная! Хороший повод записать видео про каррирование! :)
@andrewb37903 жыл бұрын
Добрый день ! Запишите плз еще ответы на вопросы для 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? Спасибо ! Особенно интересно про производительность в вебе - уж очень часто спрашивают
@frontendscience3 жыл бұрын
Такое тоже есть в планах :) но чуть позже.
@oxanananieva26433 жыл бұрын
Очень надеюсь, что продолжение будет
@frontendscience3 жыл бұрын
Готовится :)
@tenobi13 жыл бұрын
Интересно было бы послушать про поиск при помощи регулярных выражений
@Anopeng2 жыл бұрын
4:23 Интересное вычисление среднего элемента... mid = Math.floor((min + max) / 2); // 1 вариант mid = ~~((min + max) / 2); // 2 вариант
@rq9kd2 жыл бұрын
я использую побитовое НЕ, так короче
@alexuspro262 жыл бұрын
mid = (min + max) >> 1
@Chambo0153 жыл бұрын
Где то я уже это слышал) cs50
@moguha9 ай бұрын
Огромное спасибо
@anazkomult3 жыл бұрын
Прикольно. Оказывается я знал этот алгоритм всю свою жизнь из прикола "как поймать льва в пустыне".
@frontendscience3 жыл бұрын
Найс! Надо посмотреть, что это за прикол "поймать льва в пустыне")
@userman61932 жыл бұрын
Вот только сегодня реализовал это метод на JavaScript. Как же удивительно устроен мир). Я ведь даже не гуглил, из книги взял алгоритм. Я иначе реализовал, более 'математически').
@vitaliivoitovych58513 жыл бұрын
Отлично!
@atli4nikk1603 жыл бұрын
Сортировку, которая сочетает простоту в понимании и с адекватной сложностью алгоритма по времени и памяти.
@NoName-zh7cc2 жыл бұрын
Спасибо большое!
@dmytrokoka37963 жыл бұрын
было бы круто взять массив отсортированных данных, и показать разницу по времени. Или сделать небольшой курс уроков что бы было понятно где что использовать, бинарный поиск или другой вид
@frontendscience3 жыл бұрын
У нас планируется видео про сложность алгоритмов (Big O). Там как раз разберем разницу по времени исполнения различных алгоритмов на разных примерах. Stay tuned.
@someoneiniiaks98373 жыл бұрын
Посмотрел недели три назад, сегодня буду внедрять.
с минусом как на видео делают для защиты от оверфлоу
@Axe11er2 жыл бұрын
т.е если придется сначала сортировать массив, и только потом что-то искать внутри, то все равно сложность будет выше, чем если бы мы просто сразу использовали метод массива?
@silentage63102 жыл бұрын
можно отсортировать 1 раз и потом много раз быстро искать.
@АртемТимофеев-я1ы2 жыл бұрын
спасибо большое, разобрался
@stastikhomirov80753 жыл бұрын
Добрый день! Во-первых, спасибо за простой и понятный разбор. Второй момент, хочу попробовать интегрировать этот алгоритм в мини-игру "Угадай число" (да-да, всем известная игра для начинающих 😉), но хочу, чтоб отгадывал компьютер. Меня смущает только один момент - не могу придумать, как реализовать подсказку "больше-меньше" и соответствующие шаги. буду благодарен за совет. P.s. если все же сам смогу решить, напишу код сюда. Еще раз спасибо!
@frontendscience3 жыл бұрын
смотри компьютер всегда будет делить доступный range на 2 и говорить пользователю середину. а пользователь говорит больше или меньше. У нас в коде это были if() в которых мы сравнивали с target. тут тебе надо давать пользователю выбрать и его ответ подставить в if
@stastikhomirov80753 жыл бұрын
@@frontendscience да, это понятно, что if решает. Но, я когда пытался сделать это, он получался многоэтажный, что не есть хорошо. В итоге я сделал чуть иначе, подсмотрев идею в другом проекте. Там на кнопки ставили обработчик события, и в зависимости от нажатой кнопки сдвигали верхний и нижний пределы.
@frontendscience3 жыл бұрын
Отличная идея
@stastikhomirov80753 жыл бұрын
@@frontendscience спасибо. Но, увы, в целом она не моя. Я только применил ее в своей ситуации
@frontendscience3 жыл бұрын
@@stastikhomirov8075 ну не всегда надо велосипед изобретать! Успехов
@Сома-р2х2 жыл бұрын
то если использовать метод фильтр массива это линейная сложность выходит, для поиска элемента? и другой вопрос если искать по строкам в массиве, нужно сделать отсортировку?
@frontendscience2 жыл бұрын
Да. И да.
@fl1mo47 Жыл бұрын
Благодарю
@MsLodir3 жыл бұрын
Все по очереди
@alenachuyankova2 жыл бұрын
Простите за глупый вопрос. Я не понимаю, зачем в мид надо приплюсовывать лефт?
@_vasyl_50392 жыл бұрын
У випадку, якщо шуканий елемент буде правіше середини, після переприсвоювання лефт в наступному циклі середину буде знайдено неправильно, тобто вона буде менша за лефт.
@dimondsafkage46202 жыл бұрын
@@_vasyl_5039 дякую))
@АртемВ-ш7щ2 жыл бұрын
В случае, если искомый элемент будет правее середины, после переприсваивания лет в следующем цикле середина будет найдена неправильно, то есть она будет меньше лефт.
@ПетрПетров-ж9е Жыл бұрын
1:54
@kreamzfy Жыл бұрын
а почему если определить значение mid сразу при объявлении переменной - код не работает?
@nicealx Жыл бұрын
Потому что при следующем цикле mid должен обновиться исходя их новых значений right и left.
@kreamzfy Жыл бұрын
@@nicealx спасибо
@romikonlinepotapenko34753 жыл бұрын
Интересно то, что для маленьких массивов 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
@ИмяФамилия-э4ф7в3 жыл бұрын
Чтобы данные были корректными нужно повторить расчёт несколько раз. Например, 10000 раз.
@no1imwr432 жыл бұрын
Не понял зачем ((right - left)/ 2) + left. Мы же ниже всё равно меняем позицию left, нет?
@alexuspro262 жыл бұрын
Нормальные люди махом вычисляют средний индекс: (right+left)/2. Автор почему-то решил отдельно вычислять полудлину диапазона поиска, а потом отдельно добавлять смещение левого края, чтобы найти в итоге тот же средний индекс. По математике выражения эквивалентны, так что всё нормально. Только компьютеру лишние действия, но когда фронтендщики переживали на этот счет :-)
@surensamarchyan7230 Жыл бұрын
@@alexuspro26 В решение ((right - left)/ 2) + left используется более маленькие числа, и из этого следует, что нужно меньше памяти.
@alexuspro26 Жыл бұрын
@@surensamarchyan7230 JS любое число хранит в 64 битах. Числа 34 и 7346752 занимают одинаковое количество памяти. Если же Вы собираетесь хранить и обсчитывать строки, но думаете о битах, то подумайте о тактах. В общем, не убедили.
@АлександрСавченко-б8в3 жыл бұрын
из какого мультика улитка на 1 30?
@frontendscience3 жыл бұрын
«Университет монстров».
@СергейКрагель-ъ6г3 жыл бұрын
Добрый день, подскажите пожалуйста в какой программе работали в этом видео?
@frontendscience3 жыл бұрын
В смысле, в какой программе создавал видео?
@СергейКрагель-ъ6г3 жыл бұрын
@@frontendscience Извиняюсь за неточный вопрос, в чём написать такой алгоритм, чтобы его можно было запустить?
@frontendscience3 жыл бұрын
Я часто использую сайт codepen для этого
@СергейКрагель-ъ6г3 жыл бұрын
@@frontendscience Спасибо!
@ВоинственныйХомяк-к8р3 жыл бұрын
Спасибо за видео! только не совсем понимаю зачем усложнять когда можно просто воспользоваться методом arr.indexOf(serchElem) ? но при нестандартных ситуациях наверное необходимо знать такие алгоритмы - существенно сократят время и ресурсы машины. кстати, возник логичный вопрос - какой метод поиска использует метод arr.indexOf(serchElem) , линейный или бинарный?
@ВоинственныйХомяк-к8р3 жыл бұрын
Проверил, алгоритм array.indexOf(searchElem) проигрывает 15 секунд бинарному алгоритму поиска при 10млн. элементах в массиве для поиска. Сергей, а можно этот алгоритм использовать для строчных типов данных?
@frontendscience3 жыл бұрын
У строк есть свой метод indexOf.
@frontendscience3 жыл бұрын
IndexOf у массивов линейный, так как для бинарного поиска нужна сортировка а indexOf работает для любого порядка элементов
@shanthakobyan35783 жыл бұрын
сделайте обзор , как сделать функцию бомба ,например чтобы через какой то промежуток времени слово самоуничтожалось и будет интересно что б был звук взрыва
@СашаТрисектор3 жыл бұрын
а как насчет того случая, когда у нас искомый элемент в массиве не один? можно усугубить - ненужные тоже, по крайней мере, несколько. в телефонной книге, с которой Вы начали, будет, именно, так. или интервьюеры этого, почти наверняка, не понимают. кстати, это еще и по поводу популярной сентенции, что математика и образование для программиста не обязательны. и еще. бинарный поиск - это лучше чем перебор, но это не оптимальный алгоритм.
@frontendscience3 жыл бұрын
Кейс когда есть повторы - тоже не проблема. Сортируем. С помощью бинарного поиска ищем любой из дубликатов. потом двумя указателями расходимся влево и вправо - находим границы всех повторов. А какой по вашему мнению будет самы оптимальный вариант поиска в таком случае?
@cardinalerror13 жыл бұрын
Интересует, как объяснять алгоритм индекса на основе бинарных деревьев.?
@frontendscience3 жыл бұрын
Когда-нибудь мы до них дойдем)
@alexrybalov89173 жыл бұрын
Хммм, я бы заменил 9 строку на mid = Math.round((left + right)/2); Тут будет меньше текста, а работает аналогично.
@frontendscience3 жыл бұрын
Разрешаю )
@Константин-в6ш5ж3 жыл бұрын
Красно черные деревья))
@frontendscience3 жыл бұрын
Не уверен, что такое спросят на фронтенд разработчика - скорее это фулстэк или бэкенд. Но я подумаю. Благодарю)
@romanenkosergio2 жыл бұрын
Нужно собрать мегаминкс)
@dimaborovik7857 Жыл бұрын
Тут косяк, при 1 млн, нужно не млн итераций, если делать обычным перебором O(n) и если искомая фамилия последняя, достаточно 1млн-1, следовательно с 2млн соответственно
@mityaaleks42142 жыл бұрын
А если массив не отсортированный?
@frontendscience2 жыл бұрын
Тогда бинарным поиском не получится решить.
@im_dmitriy2 жыл бұрын
@@frontendscience Если выпадет на mid или искомый элемент справа отсортирован, то получится : )
@dnk_7772 жыл бұрын
А можно еще попросить о python рассказать?
@frontendscience2 жыл бұрын
Извините, я по Js.
@dnk_7772 жыл бұрын
@@frontendscience хорошо. Спасибо, js мне тоже нужен. У вас самое понятное объяснение.
@FrontendPlace Жыл бұрын
Js и python похожи. Ты просто можешь адаптировать этот код под синтаксис python. Насколько знаю нужно просто по-другому массив назначить и убрать фигурные скобки
@domikpriklyocheniu3611 Жыл бұрын
бинарный поиск это поиск строго по очереди от 0 до 100 допистим или может быть 25,14,15,3...????
@yundon8182 Жыл бұрын
Сказали же, строго отсортированный массив.
@serj0peleng Жыл бұрын
в моём счастливом советском детстве этот метод назывался просто: "метод деления пополам"... 😝
@wisarty2 жыл бұрын
Дякую
@ihorkowalski3013 Жыл бұрын
не проще L + R / 2 ?
@kalts_daniil Жыл бұрын
Число может оказаться не целым
@webbrother Жыл бұрын
@@kalts_daniil Math.floor((l + r)/2)
@СергейБердюгин-ь7ф2 жыл бұрын
pied piper ☺
@evgendrapkin71113 жыл бұрын
Да но массив данных должен быть отсортированным.
@frontendscience3 жыл бұрын
Да должен быть!
@Antonym-b5o2 жыл бұрын
@@frontendscience сортируем пущырьком и получаем O(n2) :D
@DerAleksey2 жыл бұрын
че за имена? Шелдон Пени? это на сорта яблок больше похоже
@blackgolddev40233 жыл бұрын
Алгоритм перестановки без повторений. Пример число 5 = 0000012345
@grintea41632 жыл бұрын
Ахах, как видите все очень просто. 😀
@evgeniy33702 жыл бұрын
((right - left)/ 2) + left. С какой целью left прибавляем в конце ?
@LenaFelica_songwriter Жыл бұрын
я просто прописываю Math.floor((right+left)/2) и все работает!! и в let right = array.length (без -1). Может как-то влияет, конечно, но работает)
@RENOMIZER Жыл бұрын
Чтобы в случае, если левый и правый указатели одновременно указывали на искомое число программа не уходила в бесконечный цикл
@plan-4D Жыл бұрын
left прибавляется, чтобы сдвинуть область поиска к начальной точки left. Т.е., если у тебя left 50, а right 100, то (100-50)/2 = 25, а нам нужна область с 50 до 100. Прибавляя к 25 50, получаем 75, что является искомой серединой отрезка left 50 - right 100.
@glukmaker Жыл бұрын
Чисто математически ((right - left)/ 2) + left это то же самое, что и (right + left)/ 2 Но в программировании есть свои ньюансы, поэтому лучше употреблять первое выражение. можно конечно употребить второе, но только если Вы точно уверены, что оно сработает правильно. А оно не всегда может сработать правильно, ибо есть такая штука как переполнение.