КАК РАБОТАЮТ ДЕРЕВЬЯ | СТРУКТУРЫ ДАННЫХ
Вставка
- Опубліковано 19 тра 2024
- 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 Красно-чёрное дерево - удаление
Подписывайся в телеграм-канал: t.me/Alek_OS
Начался список с 1, не с 0
За это лайк)
- Что делаешь?
- Перекрашиваю чёрных детей.
- Расист?!
- Программист.
🤣🤣🤣 Это за гранью добра и зла
- Что делаешь?
- Делаю деда красным и совершаю левый поворот.
- Коммунист?!
- Программист.
Не расстраивайтесь если не поняли ролик. Никто никогда его не поймет с первого раза. Такие ролики лучше воспринимать не как обучающие а как справочные.
я с первого раза все понял, а ты лох
))))))))))))
По фактам
Я понял с первого раза ролик. Даже слишком простой, сеньор ios, магистк комтерных наук
@@user-yd9xy3rb4x держи в курсе
Недавно наткнулся на ваш канал. Это просто супер. На фоне всего остального шлака по теме it, который существует на ютубе, ваш канал прям выделяется. Мне очень нравится ваш фундаментальный подход. Не тупо освоить синтаксис какого нибудь языка программирования, а дать именно теоретические основы программной инженерии. Да еще и в интерактивном и наглядном формате, с анимациями, графиками. Желаю развития каналу.
Точно, канал просто супер!!!
Вот так если задуматься, какую же титаническую работу автор воплотил, написать грамотно текст, визуализировать все сказанное…лайк!
Сложно, ничего непонятно, но очень интересно
Недавно сам писал реализацию красно-черного дерева, столько статей пересмотрел и видосов,эх,где ты был пару недель назад( Все очень классно и понятно!
Лучший из всех каналов на рунете по IT тематике. Спасибо за контент, за качественную информацию и высокий уровень подготовки ролика 👍
Алекс, спасибо тебе!
Мне безумно заходить этот контент, я под него стараюсь расслабляться и при этом продолжать вникать во все тонкости программирования,
с такой визуализацией и музыкальным сопровождением уносит в транс порой..
Не стоило ли указать, что видео исключительно про бинарные деревья? А то складывается ощущение, что других и не существует. Я, к примеру, всё ждал, каким будет разбор B+Tree, чтобы в очередной итерации попробовать снова обуздать принцип работы InnoDB.
Но видео очень залипательное, спасибо! Очень низкоуровнево, прям как я люблю.
согласен, эту структуру данных как-то обходят стороной, иногда даже BTree расшифровывают как Binary Tree(
Очень низкоуровнево, прям как я не люблю :)
Но было интересно
Братан, хорош, давай, давай, вперёд! Контент в кайф, можно ещё? Вообще красавчик! Можно вот этого вот почаще?
Как всегда кратко и информативно. Спасибо за пищу для мозга )
Alek, благодарю!! 👍 Инфографика великолепна! 🔥
Какой же годный контент… Большое спасибо!!!
7:10 - если при удалении узла, с двумя детьми, мы используем максимальный элемент слева(maxInLeft), то и удалять надо слева : node.left = delete(node.left, maxInLeft.key).
На слайдах : node.right = delete(node.right, maxInLeft.key).
Аналогичная неточность в коде для AVL Tree
Верно. Хорошее замечание
а я сижу не понимаю что не так
круто, так быстро и подробно про деревья я еще не видел материала
Сними ролик про B-trees плз)
Нормального ролика найти не могу, а они чаще используются для баз данных....
как вовремя! как раз разбирался с ними! спасибо!
Очень качественный контент, спасибо
Алекс, привет. Мне кажется, что на 7:05 также нужно и слева искать значение ключа заменяющего узла, чтобы его удалить. Т.е. просто нужно добавить node.left = delete(node.left, maxInLeft.key); . Переписал твой код и попробовал на датасете от 5 до 11 удалить вершину 8, то с кодом из примера 7 станет вершиной и также останется лепестком, поэтому нужно и для левой части делать проверку (удаление).
Спасибо за видео!!!
Спасибо за видео. Лайк👍
Отличный контент! Спасибо!
Отличный разбор!
В коде copyTree (8:00)на экране есть ошибка, должно быть, как и сказано в звуковом комментарии:
void copyTree(Node node) {
If(node==null) return;
print(node.value);
copyTree(node.left);
copyTree(node.right);
}
In English: pre-order, in-order, post-order
Кончаю от твоего "Окей" 😁😁😁
Спасибо за видеоролик!
Спасибо за видео
Очень круто и фундаментально
Спасибо за очередное годное видео
О. Новенький видосик. Усваиваем
Мозг расплавится понять это с первого раза. Автору респект, что не только вник и разобрался, но и иллюстрировал и разжевал. Но осознать это всё очень сложно. Только базовые идеи
Прекрасно!!!
Посмотрев данный ролик, я понимаю - какой же я тупой...
Спасибо за ролик.
Лайк не глядя, а потом уже просматриваем в высоком качестве и без перемотки 🌚
Благодарю за разбор красно-черного дерева Давно когда-то видел его разбор текстовый - не стал вьезжать и забил. STL на красно-черных - но кодировать их явно сложнее АВЛ и высота дерева в среднем на 25+% выше чем у АВЛ Так что друг друга они заменить и вправду не могут.
Деревья придумали для обычных процессоров, которые способны выполнять одно сравнение за одну команду.
Ускорители для ИИ работают иначе - там вся память ассоциативная, и поиск заключается в нахождении самого близкого значения от запроса, в идеале равным запросу. Но так как от двоичной логики далеко уйти не получилось - то поиск выполняется параллельным приближением, прямо в памяти.
Берётся блок памяти допустим 4к цифр, и каждую цифру сравнивают с запросом, все разом, параллельно. Результатом имеем новый слой данных x>y?x-y:y-x. Если на этом слое где-то получился ноль - поиск заканчивается. Иначе выполняется операция сравнения между двумя соседями, и образуется новый слой - куда помещаются только малые числа. Потом ещё и ещё слои, до самого минимального числа. Адрес минимального числа считается результатом поиска, и он может быть не точным. И ещё пока нижний слой выполняется - верхний может принять новую страницу памяти и новый поиск. Для всего этого требуется огромное количество транзисторов - но зато скорость поиска приближается к реализациям квантовых компов. Которые кстати работают примерно так-же.
Интересная инфа, что за тема? Хотел почитать статьи
Автор ты просто МегаМен. 👌👍 спасибо
огромное спасибо за видео
Спасибо конечно огромное, но контрольная по этой теме была на прошлой неделе
Спасибо 👍
Капитальный красавчик !
Интересно, круто рассказываешь, но пока тяжело. Вернусь через месяц
Подсказка, по поводу того, чтобы понять почему КЧД балансируется, узнайте что такое 2-3 дерево, частный случай n-дерева. Когда вы поймете, 2-3 дерево, тогда вы поймет что кчд - это и есть 2-3 дерево, просто для обозначения левого и правого элемента, нам понадобилось красить узлы бинарного дерева.
Это класс, это здорово! Ну а компиляторы, теперь, как работают?
Хорош комменты сыпать) лайки ставьте)
Да поставили уже ))))
Лучший просто!
Жёсткий контент. Примеров только бы побольше
видео с удовольствием .... посмотрел.
Монтаж топ, но умение объяснять это искусство. Нашёл видео по этой же теме 9летней давности и сразу всё понял. А тут от ролика только перегрузка лишняя. Но лайк за труды
Скинь ролик плз
Cпасибо, посмотрим
Спасибо тебе за помощь
Забавно что я сейчас как раз делала домашку з бинарньім деревом, и єто видео просто бьіло у меня в реках
Судьба походу
це відео ще й тілки но вийшло, у тебе там мабудь кайф лютий?
Я не понимаю
@@user-zt8zo5sd5c пон
даааа, я тоже
Спасибо за видео. Что-то код "Прямого обхода" совпадает с кодом "Обратно подхода". Или я чего-то непонял?
Самое крутое объяснение работы деревьев
23:51 если я правильно понял, то это второй кейс из момента 22:08. Тогда получается ошибочка: чёрные дети красного брата не должны быть нулями. Потому, что их чёрные высоты в момент до удаления равны 1, а не нулю.
на 8:03 у вас опечатка. Вы говорите что сначала выводим родителя потом левого и правого, но в коде у вас наоборот сначала левый и правый и потом родитель.
Alek OS скажите пожалуйста в какой программе вы делаете слайды?
да ладно, чувакккк, обожаю
Как можно было жить и не знать этого, спасибо P.S. Серьёзно, без шуток
Годнота
еще было б очень интересно посмотреть ролик про файловые системы. К примеру фат32. Как оно все устроено, где хранятся данные, что такое размер клстера и тд
у него есть поищите на канале!
@@MsAlexandr76 вы меня дурите. нету такого
Теперь точно есть) ua-cam.com/video/FQ_xeY0eCpA/v-deo.html
Персистентное AVL- дерево по неявному ключу с групповыми модификациями - кайф
Неалохо было бы посмотреть настолько подробное видео года два назад, когда была такая дисциплина. Было бы гораздо легче.
Разбор структур различных файловых систем не ожидается ли в ближайшем будущем?
Real good stuff
Интересная тема, а какое практическое применение, где это можно встретить?
Здесь представлен довольно запутанный способ поворота дерева, хотя он эффективен. Есть более простой способ, для начала лучше его освоить. выглядит это примерно так:
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 - это корень дерева.
на 8:13 функции deleteTree и copyTree совершенно идентичные, хотя вроде разные обходы.......
Хорошие видео, по кормену цикл идет?
Пушкааааа
Тинькофф ищет только Middle(+) . а видео про Junior(стажер) 😅
Очень интересно
Круто. Но жестко)
Ничего не понятно, но очень интересно!
Классный ролик, но эти нелогичные игры с интонациями просто убивают и сводят с ума. Из за них даже простая информация становится сложной. Такое ощущение что голос сгенерин плохой нейросетью.
Братан что за музон в начале до рекламы ?
1. 7:39, 7:56 print(node.value) разве нам не нужно вывести ключи, т.е. print(node.key) ?
2. 14:22 фукция leftRoatet строка node.right_.left_ = node.right_.right_; не лишняя?
3. После вставки в узла АВЛ в дерево его нужно балансировать?
P.s. очень крутое видео, спасибо.
the best ever
А где найти код из видео? И, кажется, на видео не попал метод Rotate, необходимый для реализации балансировки после удаления в КЧ дереве.
Смотрю про красно-черное дерево в голове играют Rolling Stones😅
Paint it black, понимаю)
Не глядя лайк ❤
Не слушая, тоже затычковал
Мне кажется, когда рассказывали про удаление из красно-чёрного дерева, брата по ошибке назвали дядей
Ее новое видео!
Как сойти с ума за 25 минут
В двоичном дереве поиска для метода insert забыли условие для проверки равности ключей (для того чтобы заменить значение по уже существующему ключу).
Объясните пожалуйста, а как черно-красные деревья связаны со значениями в них? Та выполняется правило, что левая ветвь меньше корня, а правая больше или равна?
Подскажите, чем наибольший элемент дерева отличается от самого наибольшего?
6:55 то есть я могу в качестве корня взять либо 7 либо 6?
По-моему на 7:05 рекурсивно удалять дубль 6ки нужно в левом потомке node.left = delete(node.left, maxInLeft.key) , а не в правом как на видео.
Мне кажется, что нужно и там, и там. Т.е. нужно просто добавить node.left = delete(node.left, maxInLeft.key), а остальное также оставить.
@@laranMQRзачем и там, и там, если мы берём 6ку именно из левого дерева, значит ее оттуда и нужно удалить. Справа может отказаться другая 6ка, которую мы удалим "просто так"
Хм, а если я пишу последовательность [0:💯] - это у меня будет одна ветка справа от начала до конца, или я что-то неправильно понял?
P.S. Только написал коммент, тут же начался блок про АВЛ 🙂
Год назад, будучи на первом курсе, сломал себе голову реализацией Fibonacci Heap, тоже тема годная и непонятная)
Классно чёрное дерево это конечно хорошо, но пока сам такую структуру не напишешь, то что-то полностью понять сложновато.
Что-то я совсем запутался... 7, 5, 8 в узлах - это пример ключей или значений? 4:20
Thanks m8
Комент для продвижения ролика*
Ох, что-то мне не хорошо 😁
Омг тут про красно-чёрное дерево... Жэээсть
Комм для продвижения ролика*
я правильно понял, в видео код писался на java?(я python'ист, +немного знаю как выглядит C)
кайф
А можешь сделать видео про сжатие zip rar их разницу и тд. Всегда было интересно как можно сохраняя содержание уменьшить объем и почему это не работает с видео хотя работает с фото
как это с видео не работает ??
Уменьшить объём сохранив содержание можно за счёт того, что часть данных дублируется. Простейший пример: 111111 0000 = 1х6, 0х4, то есть для записи 10 чисел можно использовать 10 знаков или всего 4. Возможно не очень понятно объяснил, если интересна эта тема можно погуглить про алгоритмы семейства LZ( LZ78, LZW) и про алгоритм Хаффмана. Алгоритм Хаффмана как раз на бинарных деревьях строится
@@user-ix4cm7ch5z попробуйте зипнуть видео, размер не уменьшиться практически никак
Часть есть тут ua-cam.com/video/e4vMlLbYHWI/v-deo.html: про сжатие, его виды и фото
@@user-ix4cm7ch5zотому что подавляющее большинство видеофайлов уже сжатые сами по себе, иначе 5-минутный видеоролик в Full-HD разрешении занимал бы несколько гигов места и, соответственно, каждый короткий ролик на Ютубе по времени загружался бы как полнометражный фильм