013. Алгоритмы и структуры данных - Артём Вурсалов
Вставка
- Опубліковано 8 лют 2025
- Расскажу, что такое алгоритмы и структуры данных, и зачем они нужны. Мы разберём несколько популярных алгоритмов, оценим их вычислительную сложность, а также поговорим о стандартных структурах в JavaScript.
Подача отличная! Такое чувство, будто лектору интересно, и он пришёл рассказать про то, в чем разобрался сам, от чего с лёгкостью объясняет людям!! Спасибо!
нет такого чувства, чел просто зачитывает без энтузиазма сухо и монотонно
Очень доступно изложен материал по оценке сложности, наконец-то удалось понять эту тему) Спасибо за крутую лекцию
Долго искала хорошее видео, где подробно и доходчиво объясняются алгоритмы. И вот нашла! Спасибо!
Многие жалуются на подачу. Мне лично норм. Ну да, айтишники - не радиоведущие и не топ-стримеры, которые могут удержать внимание, рассуждая на любую тему (чаще всего не сильно полезную для вас). Привыкайте. Не факт, что ваш тим лид (или тот чел, который будет вашим прямым наставником) будет таким "радиоведущим".
Самое главное в этом видео - информативность и доходчивость. Я смотрел уже кучу видео. И это - самый лучший вводный материал, который я видел. Хотя, я вообще пишу на другом языке. И до этого имел лишь поверхностное представление об оценке алгоритмов. Многие даже толком не могут рассказать, что такое структуры данных "на пальцах", как это сделано тут. Не скажу, что сейчас я стал прям эксперт, но в видео даны отличные рекомендации. Книги я, скорее всего, буду читать другие, но интернет-ресурсами обязательно воспользуюсь.
Многие жалуются ибо им клоунаду подавай - недалёкие люди. У человека грамотная и чёткая речь, рассказал без воды и с хорошими примерами. Единственная проблема - слегка тихий звук, пришлось надевать наушники.
Вроде коменты положительные
Просто лучшее видео об алгоритмах в русскоязычном ютубе! Особенно за советы в конце, спасибо
Начать нужно было со слов: « В принципе похуй, но раз вы пришли то вот...» . Мне лектор вообще доставил)
@Brendan Abdullah стоп фид ас виз зэ щет лайк зис
Спасибо! Все очень доступно и понятно! Отличная презентация!
Спасибо за лекцию!
Спасибо за знания.
Спасибо за лекцию. Было бы здорово подсветить сложность в будущих презентаций. От зеленого до красного в зависимости от сложности.
Супер!
4:50
По поводу выделения памятью методом reverse() не очень понятно. Судя по MDN этот метод меняет массив на месте и по логике не должен выделять доп. память:
MDN: "The reverse() method reverses an array in place and returns the reference to the same array"
thank you!
По символьное сравнение в строках происходит при операторе "больше", "меньше". Дальше не уверен, но строки в движке хранятся не индивидуально, для дублирования, а ~каждая одинаковая подстрока - это одна и та же строка (в смысле ссылка на одно и то же поле в памяти). Так что строгое сравнение строк не посимвольное, а по ссылке
Строки хранятся не в движке, и по ссылке думаю не сравниваются
@@ruslanvolovik2745 конечно не хранятся, а представляются, я имел в виду. По поводу работы со строками у Вячеслава Егорова где-то хорошо рассказывалось, сейчас не могу найти, но впринципе информация гуглится: stackoverflow.com/questions/40512393/understanding-string-heap-size-in-javascript-v8
14:34 при переписывании массива сложность алгоритма возрастает в n^2 раза, а не просто в n раз
n сложность это когда сколько данных зашло, столько действий и выполнилось
метод reverse переставляет значения массива на месте и поэтому новый массив не выделяется (не создаётся)
Спасибо ))
Здравствуйте! Хочу повысить свои знания в алгоритмах и структурах данных, так как когда-то изучал этот раздел и сдавал зачет.
годно, спасибо.
поздно наверное писать, но разве .reverse не возвращает ссылку на массив? Почему выделяется новая память?
Где можно прочитать про выделения памяти под массивы и про то как работает push с памятью (то что рассказывается в видео)?
binary_search: arr[mid] >= search почему тут не строгое сравнение? не породит ли это несколько дополнительных итераций в случае если search будет равен среднему элементу? Обычно еще добавляют требование что у типа есть только Less. хотя в случае JS не уверен.
Искал этот комментарий так как возник такой же вопрос. Могу ошибаться но вроде должно быть строго больше и при нахождении нужного прервать цикл чтобы лишних итераций небыло.
Можно дописать условие в начале цикла
if (arr[mid] === search) return arr[mid]
...но с другой стороны Лектор же в конце видео поясняет, что можно и не учитывать быстродействие, когда речь о небольшой погрешности и маленьких объемах, в пользу читаемости и понимания.
Есть еще факториальная сложность O(n!)
--В реализации бинарного поиска --15:55-- нельзя возвращать -1, так как переданный массив может включать в себя элементы равные значению -1-
И че? Причем тут значение элемента, читай код лучше
@@totalcount -это ошибка, а так ниче. зато читается лучше-
@@saimonshaplygin7867 нет ошибки никакой, не надо путать людей)
@@saimonshaplygin7867 вот у тебя есть массив 1,2,3,4,5 и ты ищешь в нём 5, код тебе не возвращает по нахождению 5, он вернет тебе индекс === 4, это понятно?
@@totalcount согласен, так как речь идет в задача про индексы. коммент исправил. спасибо, что поправил 👍
Где можно побольше узнать о том, как используется память в подобных методах и циклах?
посчитать самому, почитать книгу по алгоритмам, например "Алгоритмы проектирование и анализ", можно зайти на сайт e-maxx.ru/algo/ а можно на algolist.manual.ru/
А автор советуя "Искусство программирования" прям сиял ))
Он серьёзно эту серию книг посоветовал? О_О
Тогда может он не "сиял", а старался изобразить классический _trollface?_
Она же у большинства отобьёт всё желание кодить! 😆
IMHO, начинать надо с чего-то простого и в то же время фундаментального, вроде книг Роберта Седжвика или Тим Рафгардена.
5:00 `reverse` возвращает тот же массив
reverse() не возвращает новый массив.
`reverse` в ES мутирует
Подскажите, в примере второго решения задачи палиндром - показано, что в памяти хранятся, кроме строки, индексы строки, и далее происходит обращение к элементу строки по индексу и проверяется выполнение условия. А кроме индексов, результат выполнения условия по каждой итерации не хранится в памяти? Хотелось бы про это узнать)
Не хранится, если специально не сохранять
А разве для получения длины массива не надо пересчитать количество его элементов? То есть пробежаться по всему массиву что даёт сложность O(n)
Нет, не надо. Длина массива меняется только во время добавления/удаления элементов, то есть вы можете узнать длину массива за константу времени.
Если для символа в JS выделяется 2 ячейки (2 байта), то почему тогда всё слово ЧАЙКА занимает 5 ячеек, а не 10?
1:55 - jpeg не структура данных, а алгоритм сжатия.
какое n/2 если там просто всегда два числа не зависят от длины строки O(1) по памяти
n/2 это про время было.
@@user-mr-m12312 да был не прав. это про кол-во итераций а не память
Подача кошмарная! Такое чувство, что лектору это все дико неинтересно и скучно, но руководство заставило его прийти, отчего повествует он "на отеб*сь".
Ready Red так и есть)
А по контенту есть вопросы?
Люди вокруг же обязаны прыгать и развлекать таких как ты. Какой кошмар что они об этом забывают
Мужик суть мироздания программирования описал, если на секунду
Он просто в спокойном состоянии объяснил тему, медленно, подробно и всё ясно, чтобы даже у таких, как ты не возникло вопросов! Лектору спасибо большое! 👍
Я ошибаюсь или в блок-схеме ошибка? 6:09
Да. От «l++; r--;» стрелка должна идит к «l < r»
Если кто-то захотел реализовывать алгоритмы в своём коде, то, пожалуйста, не надо. Используйте возможности стандартной библиотеки
Amigo, если захочешь реализовать комментарий под видео, то, пожалуйста, не надо. Используй возможности стандартных фраз из словаря для хороших комментариев.
А если свой алгоритм работает в разы быстрее? ;)
Очень тихо только
Что за язык это? Джаваскрипт? Я просто новичок
Мда, мучают бедных фронтов в Яндексе
НЕкомфортно слушать. Вы проверяете то что выкладываете ?
Простите, не могли бы вы дать более конструктивный комментарий: Почему именно вам не комфортно, что не устроило?
IMHO: Артем за полчаса дал обзорную лекцию по алгоритмам и базовым структурам (JS), с теми минимальными знаниями, которые требуются разработчику, чтобы в случае, если потребуется решать задачи оптимизации, он [разработчик] мог быстро в это влиться и начать изучать углубленно этот класс вопросов.
Рекомендую слушать на x1.25 - у Артема размеренный темп, поэтому воспринимать с ускорением чуть проще.
Спасибо за обратную связь. Когда прослушиваешь на смартфоне, очень тихо слышно Артема. Нужно прислушиваться, а когда делаешь это долго становится не комфортно. На смартфонах нет такого диапазона громкостей как на компьютере. Сейчас включил эту лекцию на пк - можно увеличить громкость до комфортного уровня. В ближайшее время обязательно просмотрю эту лекцию.
Лектору походу очень не нравится то что он делает
Уныло но сколько лайков то поставлено . Удивительно.
Уныло
@Иван Иванов при чем тут программирование, он преподает уныло, почитать Википедию я и так могу
Ну например cs 50@Иван Иванов
Идет 21 век... 2020 год, в реальной работе программиста эту хрень никто не юзает в чистом виде максимум копипаст с стака , но интеравюеры до сих пор требуют знать это наизусть думая что это круто🤮🤮🤮
Все понятно, что у тебя один ангуляр
у меня тоже ангуляр)) но на собесе просят знать
Что же у вас у всех информатиков какой то дефект речи просто у каждого пипец -жизнь без логопеда 😂
Вот хули он умничает! Вы посмотрите! Вид такой будто мы тут все дураки, а он нет! Мой вердикт: на фронт под Бахмут!