КАК РАБОТАЮТ ДЕРЕВЬЯ | СТРУКТУРЫ ДАННЫХ
clck.ru/33qcFE - развивайте навыки в работе с данными на курсах от Яндекс Практикума
Создавай будущее вместе с Тинькофф - l.tinkoff.ru/alekosmarch/?Ldt...
КАК РАБОТАЮТ ДЕРЕВЬЯ | СТРУКТУРЫ ДАННЫХ
Подписывайся в соц. сетях:
Телеграм - t.me/Alek_OS
ВК - alekos1
❤️ Поддержка канала:
Бусти - boosty.to/alekos
Юмани - yoomoney.ru/to/410011179144828
✔️ Полезные ссылки:
Основы программирования - • КАК РАБОТАЕТ ПАМЯТЬ КО...
Полезно знать - • ЯЗЫКИ ПРОГРАММИРОВАНИЯ...
Алгоритмы и структуры данных - • УСКОРЬ СВОЙ КОД В МИЛЛ...
Мысли Алека - • КАК ИЗУЧАТЬ ПРОГРАММИР...
00:00 Введение
01:37 Яндекс Практикум
03:18 Двоичное дерево поиска
03:58 Двоичное дерево - вставка, поиск
05:45 Двоичное дерево - удаление
07:14 Обходы дерева
08:15 Работа в Тинькофф
09:49 АВЛ-дерево - вставка
16:08 АВЛ-дерево - удаление
16:44 Красно-чёрное дерево - вставка
20:34 Красно-чёрное дерево - удаление
Пікірлер: 196
Подписывайся в телеграм-канал: t.me/Alek_OS
@dmbabaycev123
Жыл бұрын
Начался список с 1, не с 0
@dmbabaycev123
Жыл бұрын
За это лайк)
- Что делаешь? - Перекрашиваю чёрных детей. - Расист?! - Программист.
@bartbelrigvardo5216
Жыл бұрын
🤣🤣🤣 Это за гранью добра и зла
@abuser-je3gl4vc1c
5 ай бұрын
- Что делаешь? - Делаю деда красным и совершаю левый поворот. - Коммунист?! - Программист.
@user-im8fx4kp1p
20 сағат бұрын
@@abuser-je3gl4vc1c open source программист
Не расстраивайтесь если не поняли ролик. Никто никогда его не поймет с первого раза. Такие ролики лучше воспринимать не как обучающие а как справочные.
@user-eb9cv3wx8b
8 ай бұрын
я с первого раза все понял, а ты лох ))))))))))))
@user-ud1fw5zc8i
5 ай бұрын
По фактам
@user-yd9xy3rb4x
Ай бұрын
Я понял с первого раза ролик. Даже слишком простой, сеньор ios, магистк комтерных наук
@user-yj2cq4fm7z
20 күн бұрын
@@user-yd9xy3rb4x держи в курсе
Недавно наткнулся на ваш канал. Это просто супер. На фоне всего остального шлака по теме it, который существует на ютубе, ваш канал прям выделяется. Мне очень нравится ваш фундаментальный подход. Не тупо освоить синтаксис какого нибудь языка программирования, а дать именно теоретические основы программной инженерии. Да еще и в интерактивном и наглядном формате, с анимациями, графиками. Желаю развития каналу.
@DemetriuszStrykowski
Жыл бұрын
Точно, канал просто супер!!!
Вот так если задуматься, какую же титаническую работу автор воплотил, написать грамотно текст, визуализировать все сказанное…лайк!
Сложно, ничего непонятно, но очень интересно
7:10 - если при удалении узла, с двумя детьми, мы используем максимальный элемент слева(maxInLeft), то и удалять надо слева : node.left = delete(node.left, maxInLeft.key). На слайдах : node.right = delete(node.right, maxInLeft.key). Аналогичная неточность в коде для AVL Tree
@user-ul9hq7xm2q
2 ай бұрын
Верно. Хорошее замечание
@Andreypochemu
12 күн бұрын
а я сижу не понимаю что не так
Недавно сам писал реализацию красно-черного дерева, столько статей пересмотрел и видосов,эх,где ты был пару недель назад( Все очень классно и понятно!
Не стоило ли указать, что видео исключительно про бинарные деревья? А то складывается ощущение, что других и не существует. Я, к примеру, всё ждал, каким будет разбор B+Tree, чтобы в очередной итерации попробовать снова обуздать принцип работы InnoDB. Но видео очень залипательное, спасибо! Очень низкоуровнево, прям как я люблю.
@alexshturmovik3037
Жыл бұрын
согласен, эту структуру данных как-то обходят стороной, иногда даже BTree расшифровывают как Binary Tree(
@DenysHolovin
10 ай бұрын
Очень низкоуровнево, прям как я не люблю :) Но было интересно
Алекс, спасибо тебе! Мне безумно заходить этот контент, я под него стараюсь расслабляться и при этом продолжать вникать во все тонкости программирования, с такой визуализацией и музыкальным сопровождением уносит в транс порой..
Лучший из всех каналов на рунете по IT тематике. Спасибо за контент, за качественную информацию и высокий уровень подготовки ролика 👍
Alek, благодарю!! 👍 Инфографика великолепна! 🔥
Какой же годный контент… Большое спасибо!!!
Сними ролик про B-trees плз) Нормального ролика найти не могу, а они чаще используются для баз данных....
Спасибо за видео!!!
Как всегда кратко и информативно. Спасибо за пищу для мозга )
круто, так быстро и подробно про деревья я еще не видел материала
Кончаю от твоего "Окей" 😁😁😁
Братан, хорош, давай, давай, вперёд! Контент в кайф, можно ещё? Вообще красавчик! Можно вот этого вот почаще?
как вовремя! как раз разбирался с ними! спасибо!
Отличный контент! Спасибо!
Отличный разбор! В коде copyTree (8:00)на экране есть ошибка, должно быть, как и сказано в звуковом комментарии: void copyTree(Node node) { If(node==null) return; print(node.value); copyTree(node.left); copyTree(node.right); }
@yuriykachanov2212
8 ай бұрын
In English: pre-order, in-order, post-order
Спасибо за видеоролик!
Спасибо за видео. Лайк👍
Очень качественный контент, спасибо
Спасибо за очередное годное видео
Спасибо за видео Очень круто и фундаментально
Прекрасно!!!
огромное спасибо за видео
Посмотрев данный ролик, я понимаю - какой же я тупой... Спасибо за ролик.
О. Новенький видосик. Усваиваем
Деревья придумали для обычных процессоров, которые способны выполнять одно сравнение за одну команду. Ускорители для ИИ работают иначе - там вся память ассоциативная, и поиск заключается в нахождении самого близкого значения от запроса, в идеале равным запросу. Но так как от двоичной логики далеко уйти не получилось - то поиск выполняется параллельным приближением, прямо в памяти. Берётся блок памяти допустим 4к цифр, и каждую цифру сравнивают с запросом, все разом, параллельно. Результатом имеем новый слой данных x>y?x-y:y-x. Если на этом слое где-то получился ноль - поиск заканчивается. Иначе выполняется операция сравнения между двумя соседями, и образуется новый слой - куда помещаются только малые числа. Потом ещё и ещё слои, до самого минимального числа. Адрес минимального числа считается результатом поиска, и он может быть не точным. И ещё пока нижний слой выполняется - верхний может принять новую страницу памяти и новый поиск. Для всего этого требуется огромное количество транзисторов - но зато скорость поиска приближается к реализациям квантовых компов. Которые кстати работают примерно так-же.
@asjvchnvh9313
3 ай бұрын
Интересная инфа, что за тема? Хотел почитать статьи
видео с удовольствием .... посмотрел.
Автор ты просто МегаМен. 👌👍 спасибо
Лучший просто!
Спасибо тебе за помощь
Хорош комменты сыпать) лайки ставьте)
@senkamatic8448
Жыл бұрын
Да поставили уже ))))
Лайк не глядя, а потом уже просматриваем в высоком качестве и без перемотки 🌚
Cпасибо, посмотрим
Благодарю за разбор красно-черного дерева Давно когда-то видел его разбор текстовый - не стал вьезжать и забил. STL на красно-черных - но кодировать их явно сложнее АВЛ и высота дерева в среднем на 25+% выше чем у АВЛ Так что друг друга они заменить и вправду не могут.
Мозг расплавится понять это с первого раза. Автору респект, что не только вник и разобрался, но и иллюстрировал и разжевал. Но осознать это всё очень сложно. Только базовые идеи
Алекс, привет. Мне кажется, что на 7:05 также нужно и слева искать значение ключа заменяющего узла, чтобы его удалить. Т.е. просто нужно добавить node.left = delete(node.left, maxInLeft.key); . Переписал твой код и попробовал на датасете от 5 до 11 удалить вершину 8, то с кодом из примера 7 станет вершиной и также останется лепестком, поэтому нужно и для левой части делать проверку (удаление).
Подсказка, по поводу того, чтобы понять почему КЧД балансируется, узнайте что такое 2-3 дерево, частный случай n-дерева. Когда вы поймете, 2-3 дерево, тогда вы поймет что кчд - это и есть 2-3 дерево, просто для обозначения левого и правого элемента, нам понадобилось красить узлы бинарного дерева.
Спасибо конечно огромное, но контрольная по этой теме была на прошлой неделе
Капитальный красавчик !
Спасибо 👍
Очень интересно
на 8:13 функции deleteTree и copyTree совершенно идентичные, хотя вроде разные обходы.......
Монтаж топ, но умение объяснять это искусство. Нашёл видео по этой же теме 9летней давности и сразу всё понял. А тут от ролика только перегрузка лишняя. Но лайк за труды
@gabibli
4 ай бұрын
Скинь ролик плз
Классный ролик, но эти нелогичные игры с интонациями просто убивают и сводят с ума. Из за них даже простая информация становится сложной. Такое ощущение что голос сгенерин плохой нейросетью.
Интересно, круто рассказываешь, но пока тяжело. Вернусь через месяц
на 8:03 у вас опечатка. Вы говорите что сначала выводим родителя потом левого и правого, но в коде у вас наоборот сначала левый и правый и потом родитель.
Жёсткий контент. Примеров только бы побольше
Real good stuff
Забавно что я сейчас как раз делала домашку з бинарньім деревом, и єто видео просто бьіло у меня в реках Судьба походу
@sospeedwagon9289
Жыл бұрын
це відео ще й тілки но вийшло, у тебе там мабудь кайф лютий?
@user-zt8zo5sd5c
Жыл бұрын
Я не понимаю
@sospeedwagon9289
Жыл бұрын
@@user-zt8zo5sd5c пон
@user-ke7su7zc9l
Жыл бұрын
даааа, я тоже
23:51 если я правильно понял, то это второй кейс из момента 22:08. Тогда получается ошибочка: чёрные дети красного брата не должны быть нулями. Потому, что их чёрные высоты в момент до удаления равны 1, а не нулю.
да ладно, чувакккк, обожаю
Здесь представлен довольно запутанный способ поворота дерева, хотя он эффективен. Есть более простой способ, для начала лучше его освоить. выглядит это примерно так: private Node rotateLeft(Node oldParent) { Node newParent = oldParent.right; Node newParentLeft = newParent.left; newParent.left = oldParent; oldParent.right = newParentLeft; oldParent.computeHeight(); newParent.computeHeight(); return newParent; } Данный метод поворачивает поддерево и возвращает новый корень,. Чтобы его корректно использовать, нужно чтобы методы добавления и удаления возвращали Node, и предрекурсионном методе вызов должен быть таким root = add(key, root);, где root - это корень дерева.
Самое крутое объяснение работы деревьев
Это класс, это здорово! Ну а компиляторы, теперь, как работают?
Годнота
Тинькофф ищет только Middle(+) . а видео про Junior(стажер) 😅
Неалохо было бы посмотреть настолько подробное видео года два назад, когда была такая дисциплина. Было бы гораздо легче.
Ничего не понятно, но очень интересно!
Персистентное AVL- дерево по неявному ключу с групповыми модификациями - кайф
еще было б очень интересно посмотреть ролик про файловые системы. К примеру фат32. Как оно все устроено, где хранятся данные, что такое размер клстера и тд
@MsAlexandr76
Жыл бұрын
у него есть поищите на канале!
@OpenFrimeTVcom
Жыл бұрын
@@MsAlexandr76 вы меня дурите. нету такого
@user-pd8vg1gd5z
Жыл бұрын
Теперь точно есть) kzread.info/dash/bejne/eIWT2seSYMipoKQ.html
Как можно было жить и не знать этого, спасибо P.S. Серьёзно, без шуток
Alek OS скажите пожалуйста в какой программе вы делаете слайды?
Пушкааааа
Круто. Но жестко)
Спасибо за видео. Что-то код "Прямого обхода" совпадает с кодом "Обратно подхода". Или я чего-то непонял?
Интересная тема, а какое практическое применение, где это можно встретить?
Смотрю про красно-черное дерево в голове играют Rolling Stones😅
@user-pl6hu6si1u
Жыл бұрын
Paint it black, понимаю)
Ее новое видео!
В двоичном дереве поиска для метода insert забыли условие для проверки равности ключей (для того чтобы заменить значение по уже существующему ключу).
the best ever
Хорошие видео, по кормену цикл идет?
1. 7:39, 7:56 print(node.value) разве нам не нужно вывести ключи, т.е. print(node.key) ? 2. 14:22 фукция leftRoatet строка node.right_.left_ = node.right_.right_; не лишняя? 3. После вставки в узла АВЛ в дерево его нужно балансировать? P.s. очень крутое видео, спасибо.
Разбор структур различных файловых систем не ожидается ли в ближайшем будущем?
Подскажите, чем наибольший элемент дерева отличается от самого наибольшего?
Мне кажется, когда рассказывали про удаление из красно-чёрного дерева, брата по ошибке назвали дядей
Омг тут про красно-чёрное дерево... Жэээсть
Как сойти с ума за 25 минут
А где найти код из видео? И, кажется, на видео не попал метод Rotate, необходимый для реализации балансировки после удаления в КЧ дереве.
Братан что за музон в начале до рекламы ?
По-моему на 7:05 рекурсивно удалять дубль 6ки нужно в левом потомке node.left = delete(node.left, maxInLeft.key) , а не в правом как на видео.
@laranMQR
Жыл бұрын
Мне кажется, что нужно и там, и там. Т.е. нужно просто добавить node.left = delete(node.left, maxInLeft.key), а остальное также оставить.
@vsevolodkasatchikov6730
Жыл бұрын
@@laranMQRзачем и там, и там, если мы берём 6ку именно из левого дерева, значит ее оттуда и нужно удалить. Справа может отказаться другая 6ка, которую мы удалим "просто так"
На протяжение всего времени изучения программирования, я уже наверное 10000 раз сказал что я тупой )
Thanks m8
Комент для продвижения ролика*
Не глядя лайк ❤
@user-ow6dr9ok6c
Жыл бұрын
Не слушая, тоже затычковал
Классно чёрное дерево это конечно хорошо, но пока сам такую структуру не напишешь, то что-то полностью понять сложновато.
Объясните пожалуйста, а как черно-красные деревья связаны со значениями в них? Та выполняется правило, что левая ветвь меньше корня, а правая больше или равна?
6:55 то есть я могу в качестве корня взять либо 7 либо 6?
Комм для продвижения ролика*
Год назад, будучи на первом курсе, сломал себе голову реализацией Fibonacci Heap, тоже тема годная и непонятная)
Ох, что-то мне не хорошо 😁
Жуть, тут пузырьком то не написать, а тут такое разобрано. 😢
Черные родители, черный дядя, черные дети - как будто в гетто зашел)
кайф
Захотелось поиграть такую игру, с балансировкой на телефоне