КАК РАБОТАЮТ ДЕРЕВЬЯ | СТРУКТУРЫ ДАННЫХ

Поділитися
Вставка
  • Опубліковано 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 Красно-чёрное дерево - удаление

КОМЕНТАРІ • 196

  • @AlekOS
    @AlekOS  Рік тому +20

    Подписывайся в телеграм-канал: t.me/Alek_OS

  • @Cheeckoff
    @Cheeckoff Рік тому +356

    - Что делаешь?
    - Перекрашиваю чёрных детей.
    - Расист?!
    - Программист.

    • @bartbelrigvardo5216
      @bartbelrigvardo5216 Рік тому +9

      🤣🤣🤣 Это за гранью добра и зла

    • @abuser-je3gl4vc1c
      @abuser-je3gl4vc1c 4 місяці тому +10

      - Что делаешь?
      - Делаю деда красным и совершаю левый поворот.
      - Коммунист?!
      - Программист.

  • @user-jx8pe4yz6q
    @user-jx8pe4yz6q Рік тому +147

    Не расстраивайтесь если не поняли ролик. Никто никогда его не поймет с первого раза. Такие ролики лучше воспринимать не как обучающие а как справочные.

    • @user-eb9cv3wx8b
      @user-eb9cv3wx8b 8 місяців тому

      я с первого раза все понял, а ты лох
      ))))))))))))

    • @user-ud1fw5zc8i
      @user-ud1fw5zc8i 5 місяців тому

      По фактам

    • @user-yd9xy3rb4x
      @user-yd9xy3rb4x Місяць тому

      Я понял с первого раза ролик. Даже слишком простой, сеньор ios, магистк комтерных наук

    • @user-yj2cq4fm7z
      @user-yj2cq4fm7z 11 днів тому

      @@user-yd9xy3rb4x держи в курсе

  • @xagent
    @xagent Рік тому +117

    Недавно наткнулся на ваш канал. Это просто супер. На фоне всего остального шлака по теме it, который существует на ютубе, ваш канал прям выделяется. Мне очень нравится ваш фундаментальный подход. Не тупо освоить синтаксис какого нибудь языка программирования, а дать именно теоретические основы программной инженерии. Да еще и в интерактивном и наглядном формате, с анимациями, графиками. Желаю развития каналу.

  • @user-ot5iy5es4l
    @user-ot5iy5es4l Рік тому +48

    Вот так если задуматься, какую же титаническую работу автор воплотил, написать грамотно текст, визуализировать все сказанное…лайк!

  • @viska_tru
    @viska_tru Рік тому +28

    Сложно, ничего непонятно, но очень интересно

  • @user-ov1xr1ip7i
    @user-ov1xr1ip7i Рік тому +13

    Недавно сам писал реализацию красно-черного дерева, столько статей пересмотрел и видосов,эх,где ты был пару недель назад( Все очень классно и понятно!

  • @p.al.trofimov
    @p.al.trofimov Рік тому +5

    Лучший из всех каналов на рунете по IT тематике. Спасибо за контент, за качественную информацию и высокий уровень подготовки ролика 👍

  • @BigRock379
    @BigRock379 8 місяців тому

    Алекс, спасибо тебе!
    Мне безумно заходить этот контент, я под него стараюсь расслабляться и при этом продолжать вникать во все тонкости программирования,
    с такой визуализацией и музыкальным сопровождением уносит в транс порой..

  • @cepmadbrozzer4448
    @cepmadbrozzer4448 Рік тому +63

    Не стоило ли указать, что видео исключительно про бинарные деревья? А то складывается ощущение, что других и не существует. Я, к примеру, всё ждал, каким будет разбор B+Tree, чтобы в очередной итерации попробовать снова обуздать принцип работы InnoDB.
    Но видео очень залипательное, спасибо! Очень низкоуровнево, прям как я люблю.

    • @alexshturmovik3037
      @alexshturmovik3037 Рік тому +4

      согласен, эту структуру данных как-то обходят стороной, иногда даже BTree расшифровывают как Binary Tree(

    • @DenysHolovin
      @DenysHolovin 9 місяців тому +1

      Очень низкоуровнево, прям как я не люблю :)
      Но было интересно

  • @whitefox1777
    @whitefox1777 Рік тому +9

    Братан, хорош, давай, давай, вперёд! Контент в кайф, можно ещё? Вообще красавчик! Можно вот этого вот почаще?

  • @pashkiewich
    @pashkiewich Рік тому +5

    Как всегда кратко и информативно. Спасибо за пищу для мозга )

  • @Dmitrii-Zhinzhilov
    @Dmitrii-Zhinzhilov 7 місяців тому

    Alek, благодарю!! 👍 Инфографика великолепна! 🔥

  • @alekseykhromov259
    @alekseykhromov259 Рік тому +5

    Какой же годный контент… Большое спасибо!!!

  • @MicP8
    @MicP8 Рік тому +17

    7:10 - если при удалении узла, с двумя детьми, мы используем максимальный элемент слева(maxInLeft), то и удалять надо слева : node.left = delete(node.left, maxInLeft.key).
    На слайдах : node.right = delete(node.right, maxInLeft.key).
    Аналогичная неточность в коде для AVL Tree

    • @user-ul9hq7xm2q
      @user-ul9hq7xm2q 2 місяці тому +2

      Верно. Хорошее замечание

    • @Andreypochemu
      @Andreypochemu 3 дні тому

      а я сижу не понимаю что не так

  • @arswarog
    @arswarog Рік тому

    круто, так быстро и подробно про деревья я еще не видел материала

  • @zadrot64
    @zadrot64 Рік тому +10

    Сними ролик про B-trees плз)
    Нормального ролика найти не могу, а они чаще используются для баз данных....

  • @rechw769
    @rechw769 Рік тому

    как вовремя! как раз разбирался с ними! спасибо!

  • @user-jg7ly1ib2z
    @user-jg7ly1ib2z Рік тому +2

    Очень качественный контент, спасибо

  • @laranMQR
    @laranMQR Рік тому +7

    Алекс, привет. Мне кажется, что на 7:05 также нужно и слева искать значение ключа заменяющего узла, чтобы его удалить. Т.е. просто нужно добавить node.left = delete(node.left, maxInLeft.key); . Переписал твой код и попробовал на датасете от 5 до 11 удалить вершину 8, то с кодом из примера 7 станет вершиной и также останется лепестком, поэтому нужно и для левой части делать проверку (удаление).

  • @sashakuznechkin
    @sashakuznechkin Рік тому +1

    Спасибо за видео!!!

  • @user-fy3iv9dp7g
    @user-fy3iv9dp7g Рік тому +1

    Спасибо за видео. Лайк👍

  • @matweyrybakovskiy2952
    @matweyrybakovskiy2952 Рік тому +1

    Отличный контент! Спасибо!

  • @MicP8
    @MicP8 Рік тому +13

    Отличный разбор!
    В коде copyTree (8:00)на экране есть ошибка, должно быть, как и сказано в звуковом комментарии:
    void copyTree(Node node) {
    If(node==null) return;
    print(node.value);
    copyTree(node.left);
    copyTree(node.right);
    }

  • @ruslandad365
    @ruslandad365 Рік тому +3

    Кончаю от твоего "Окей" 😁😁😁

  • @andarworld8985
    @andarworld8985 Рік тому

    Спасибо за видеоролик!

  • @leomysky
    @leomysky 11 місяців тому

    Спасибо за видео
    Очень круто и фундаментально

  • @user-ll7mx9mn8z
    @user-ll7mx9mn8z Рік тому +1

    Спасибо за очередное годное видео

  • @ghjklfghk
    @ghjklfghk Рік тому +1

    О. Новенький видосик. Усваиваем

  • @prokaza97
    @prokaza97 6 місяців тому

    Мозг расплавится понять это с первого раза. Автору респект, что не только вник и разобрался, но и иллюстрировал и разжевал. Но осознать это всё очень сложно. Только базовые идеи

  • @nikolaiandrianov1856
    @nikolaiandrianov1856 Рік тому +1

    Прекрасно!!!

  • @bOOOOkash
    @bOOOOkash Рік тому +3

    Посмотрев данный ролик, я понимаю - какой же я тупой...
    Спасибо за ролик.

  • @bOOOOkash
    @bOOOOkash Рік тому +1

    Лайк не глядя, а потом уже просматриваем в высоком качестве и без перемотки 🌚

  • @vadimmatskevich8439
    @vadimmatskevich8439 Рік тому

    Благодарю за разбор красно-черного дерева Давно когда-то видел его разбор текстовый - не стал вьезжать и забил. STL на красно-черных - но кодировать их явно сложнее АВЛ и высота дерева в среднем на 25+% выше чем у АВЛ Так что друг друга они заменить и вправду не могут.

  • @avi-crakhome2524
    @avi-crakhome2524 Рік тому +10

    Деревья придумали для обычных процессоров, которые способны выполнять одно сравнение за одну команду.
    Ускорители для ИИ работают иначе - там вся память ассоциативная, и поиск заключается в нахождении самого близкого значения от запроса, в идеале равным запросу. Но так как от двоичной логики далеко уйти не получилось - то поиск выполняется параллельным приближением, прямо в памяти.
    Берётся блок памяти допустим 4к цифр, и каждую цифру сравнивают с запросом, все разом, параллельно. Результатом имеем новый слой данных x>y?x-y:y-x. Если на этом слое где-то получился ноль - поиск заканчивается. Иначе выполняется операция сравнения между двумя соседями, и образуется новый слой - куда помещаются только малые числа. Потом ещё и ещё слои, до самого минимального числа. Адрес минимального числа считается результатом поиска, и он может быть не точным. И ещё пока нижний слой выполняется - верхний может принять новую страницу памяти и новый поиск. Для всего этого требуется огромное количество транзисторов - но зато скорость поиска приближается к реализациям квантовых компов. Которые кстати работают примерно так-же.

    • @asjvchnvh9313
      @asjvchnvh9313 3 місяці тому

      Интересная инфа, что за тема? Хотел почитать статьи

  • @vladimirzabaro6795
    @vladimirzabaro6795 Рік тому +1

    Автор ты просто МегаМен. 👌👍 спасибо

  • @aidamur
    @aidamur Рік тому

    огромное спасибо за видео

  • @jamessmit9738
    @jamessmit9738 Рік тому

    Спасибо конечно огромное, но контрольная по этой теме была на прошлой неделе

  • @Mercowod
    @Mercowod 9 місяців тому

    Спасибо 👍

  • @d1merz
    @d1merz Рік тому +1

    Капитальный красавчик !

  • @user-ij9vb6wn1z
    @user-ij9vb6wn1z Рік тому +1

    Интересно, круто рассказываешь, но пока тяжело. Вернусь через месяц

  • @user-sf5zv4jc5v
    @user-sf5zv4jc5v Рік тому +2

    Подсказка, по поводу того, чтобы понять почему КЧД балансируется, узнайте что такое 2-3 дерево, частный случай n-дерева. Когда вы поймете, 2-3 дерево, тогда вы поймет что кчд - это и есть 2-3 дерево, просто для обозначения левого и правого элемента, нам понадобилось красить узлы бинарного дерева.

  • @user-lp3ke5bg2u
    @user-lp3ke5bg2u Рік тому

    Это класс, это здорово! Ну а компиляторы, теперь, как работают?

  • @aleksandrk.5818
    @aleksandrk.5818 Рік тому +23

    Хорош комменты сыпать) лайки ставьте)

  • @djorjegolmud517
    @djorjegolmud517 5 місяців тому

    Лучший просто!

  • @user-gv9dg4ni5g
    @user-gv9dg4ni5g 5 місяців тому

    Жёсткий контент. Примеров только бы побольше

  • @BeketChan
    @BeketChan Рік тому

    видео с удовольствием .... посмотрел.

  • @MgsMen
    @MgsMen 4 місяці тому +2

    Монтаж топ, но умение объяснять это искусство. Нашёл видео по этой же теме 9летней давности и сразу всё понял. А тут от ролика только перегрузка лишняя. Но лайк за труды

    • @gabibli
      @gabibli 4 місяці тому

      Скинь ролик плз

  • @user-bw1fh9pd3i
    @user-bw1fh9pd3i Рік тому +1

    Cпасибо, посмотрим

  • @ron8897
    @ron8897 5 місяців тому

    Спасибо тебе за помощь

  • @user-eb1qm7ho8h
    @user-eb1qm7ho8h Рік тому +9

    Забавно что я сейчас как раз делала домашку з бинарньім деревом, и єто видео просто бьіло у меня в реках
    Судьба походу

  • @glebbondarenko67
    @glebbondarenko67 Рік тому +4

    Спасибо за видео. Что-то код "Прямого обхода" совпадает с кодом "Обратно подхода". Или я чего-то непонял?

  • @eugenevolohonsky1469
    @eugenevolohonsky1469 Рік тому

    Самое крутое объяснение работы деревьев

  • @user-pl6hu6si1u
    @user-pl6hu6si1u Рік тому

    23:51 если я правильно понял, то это второй кейс из момента 22:08. Тогда получается ошибочка: чёрные дети красного брата не должны быть нулями. Потому, что их чёрные высоты в момент до удаления равны 1, а не нулю.

  • @xagent
    @xagent Рік тому +2

    на 8:03 у вас опечатка. Вы говорите что сначала выводим родителя потом левого и правого, но в коде у вас наоборот сначала левый и правый и потом родитель.

  • @user-bw1fh9pd3i
    @user-bw1fh9pd3i Рік тому +1

    Alek OS скажите пожалуйста в какой программе вы делаете слайды?

  • @atmiccmx
    @atmiccmx Рік тому +4

    да ладно, чувакккк, обожаю

  • @china6714
    @china6714 Рік тому +1

    Как можно было жить и не знать этого, спасибо P.S. Серьёзно, без шуток

  • @alexeyfladarov5200
    @alexeyfladarov5200 Рік тому +2

    Годнота

  • @OpenFrimeTVcom
    @OpenFrimeTVcom Рік тому +3

    еще было б очень интересно посмотреть ролик про файловые системы. К примеру фат32. Как оно все устроено, где хранятся данные, что такое размер клстера и тд

    • @MsAlexandr76
      @MsAlexandr76 Рік тому

      у него есть поищите на канале!

    • @OpenFrimeTVcom
      @OpenFrimeTVcom Рік тому

      @@MsAlexandr76 вы меня дурите. нету такого

    • @user-pd8vg1gd5z
      @user-pd8vg1gd5z Рік тому

      Теперь точно есть) ua-cam.com/video/FQ_xeY0eCpA/v-deo.html

  • @daniilivanik5021
    @daniilivanik5021 11 місяців тому

    Персистентное AVL- дерево по неявному ключу с групповыми модификациями - кайф

  • @sweetarteko
    @sweetarteko Рік тому +1

    Неалохо было бы посмотреть настолько подробное видео года два назад, когда была такая дисциплина. Было бы гораздо легче.

  • @cepmadbrozzer4448
    @cepmadbrozzer4448 Рік тому +2

    Разбор структур различных файловых систем не ожидается ли в ближайшем будущем?

  • @where631
    @where631 Рік тому

    Real good stuff

  • @user-nm8fu9fh7j
    @user-nm8fu9fh7j Рік тому +2

    Интересная тема, а какое практическое применение, где это можно встретить?

  • @user-ip2fg9up8u
    @user-ip2fg9up8u 6 місяців тому

    Здесь представлен довольно запутанный способ поворота дерева, хотя он эффективен. Есть более простой способ, для начала лучше его освоить. выглядит это примерно так:
    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 - это корень дерева.

  • @vitaly_markov
    @vitaly_markov Рік тому +2

    на 8:13 функции deleteTree и copyTree совершенно идентичные, хотя вроде разные обходы.......

  • @wensietland5169
    @wensietland5169 Рік тому

    Хорошие видео, по кормену цикл идет?

  • @call_nick
    @call_nick Рік тому +2

    Пушкааааа

  • @Ahmedhkad
    @Ahmedhkad Рік тому +3

    Тинькофф ищет только Middle(+) . а видео про Junior(стажер) 😅

  • @iliyalaz6132
    @iliyalaz6132 Рік тому

    Очень интересно

  • @ceo-s
    @ceo-s Рік тому +2

    Круто. Но жестко)

  • @alekseybiryukov7497
    @alekseybiryukov7497 Рік тому +1

    Ничего не понятно, но очень интересно!

  • @user-eo3xn8sz7d
    @user-eo3xn8sz7d 6 місяців тому +2

    Классный ролик, но эти нелогичные игры с интонациями просто убивают и сводят с ума. Из за них даже простая информация становится сложной. Такое ощущение что голос сгенерин плохой нейросетью.

  • @memyselfi9155
    @memyselfi9155 Рік тому +2

    Братан что за музон в начале до рекламы ?

  • @KIR_Engineer
    @KIR_Engineer 2 місяці тому

    1. 7:39, 7:56 print(node.value) разве нам не нужно вывести ключи, т.е. print(node.key) ?
    2. 14:22 фукция leftRoatet строка node.right_.left_ = node.right_.right_; не лишняя?
    3. После вставки в узла АВЛ в дерево его нужно балансировать?
    P.s. очень крутое видео, спасибо.

  • @web-writer4769
    @web-writer4769 Рік тому +1

    the best ever

  • @alanturing487
    @alanturing487 5 місяців тому

    А где найти код из видео? И, кажется, на видео не попал метод Rotate, необходимый для реализации балансировки после удаления в КЧ дереве.

  • @anolegych
    @anolegych Рік тому +1

    Смотрю про красно-черное дерево в голове играют Rolling Stones😅

  • @geekdev0
    @geekdev0 Рік тому +2

    Не глядя лайк ❤

    • @user-ow6dr9ok6c
      @user-ow6dr9ok6c Рік тому

      Не слушая, тоже затычковал

  • @user-ze3ez3iy6c
    @user-ze3ez3iy6c 11 місяців тому

    Мне кажется, когда рассказывали про удаление из красно-чёрного дерева, брата по ошибке назвали дядей

  • @borshch334
    @borshch334 Рік тому +2

    Ее новое видео!

  • @antik_tm2272
    @antik_tm2272 6 місяців тому +2

    Как сойти с ума за 25 минут

  • @user-mt6wt9vc1x
    @user-mt6wt9vc1x 13 днів тому

    В двоичном дереве поиска для метода insert забыли условие для проверки равности ключей (для того чтобы заменить значение по уже существующему ключу).

  • @danitkriper4114
    @danitkriper4114 Рік тому

    Объясните пожалуйста, а как черно-красные деревья связаны со значениями в них? Та выполняется правило, что левая ветвь меньше корня, а правая больше или равна?

  • @mikemerinoff
    @mikemerinoff 11 місяців тому

    Подскажите, чем наибольший элемент дерева отличается от самого наибольшего?

  • @artroden3746
    @artroden3746 Рік тому +1

    6:55 то есть я могу в качестве корня взять либо 7 либо 6?

  • @markbondarchuk7043
    @markbondarchuk7043 Рік тому +1

    По-моему на 7:05 рекурсивно удалять дубль 6ки нужно в левом потомке node.left = delete(node.left, maxInLeft.key) , а не в правом как на видео.

    • @laranMQR
      @laranMQR Рік тому

      Мне кажется, что нужно и там, и там. Т.е. нужно просто добавить node.left = delete(node.left, maxInLeft.key), а остальное также оставить.

    • @vsevolodkasatchikov6730
      @vsevolodkasatchikov6730 Рік тому

      ​@@laranMQRзачем и там, и там, если мы берём 6ку именно из левого дерева, значит ее оттуда и нужно удалить. Справа может отказаться другая 6ка, которую мы удалим "просто так"

  • @user-uu8jv2ki3h
    @user-uu8jv2ki3h 9 місяців тому

    Хм, а если я пишу последовательность [0:💯] - это у меня будет одна ветка справа от начала до конца, или я что-то неправильно понял?
    P.S. Только написал коммент, тут же начался блок про АВЛ 🙂

  • @user-ho9hy2oc9c
    @user-ho9hy2oc9c Рік тому

    Год назад, будучи на первом курсе, сломал себе голову реализацией Fibonacci Heap, тоже тема годная и непонятная)

  • @Secvad
    @Secvad Рік тому

    Классно чёрное дерево это конечно хорошо, но пока сам такую структуру не напишешь, то что-то полностью понять сложновато.

  • @something-like-that
    @something-like-that 8 місяців тому

    Что-то я совсем запутался... 7, 5, 8 в узлах - это пример ключей или значений? 4:20

  • @where631
    @where631 Рік тому

    Thanks m8

  • @An_entertaining_story
    @An_entertaining_story Рік тому +2

    Комент для продвижения ролика*

  • @Tim-Slim
    @Tim-Slim Рік тому +1

    Ох, что-то мне не хорошо 😁

  • @andromeda_vesna
    @andromeda_vesna Рік тому +3

    Омг тут про красно-чёрное дерево... Жэээсть

  • @namename7527
    @namename7527 Рік тому +2

    Комм для продвижения ролика*

  • @p8wowyt121
    @p8wowyt121 Рік тому

    я правильно понял, в видео код писался на java?(я python'ист, +немного знаю как выглядит C)

  • @nerusnotfound
    @nerusnotfound Рік тому +2

    кайф

  • @rypatokochev3387
    @rypatokochev3387 Рік тому +1

    А можешь сделать видео про сжатие zip rar их разницу и тд. Всегда было интересно как можно сохраняя содержание уменьшить объем и почему это не работает с видео хотя работает с фото

    • @user-ix4cm7ch5z
      @user-ix4cm7ch5z Рік тому

      как это с видео не работает ??

    • @user-qw6xi9pr5d
      @user-qw6xi9pr5d Рік тому +1

      Уменьшить объём сохранив содержание можно за счёт того, что часть данных дублируется. Простейший пример: 111111 0000 = 1х6, 0х4, то есть для записи 10 чисел можно использовать 10 знаков или всего 4. Возможно не очень понятно объяснил, если интересна эта тема можно погуглить про алгоритмы семейства LZ( LZ78, LZW) и про алгоритм Хаффмана. Алгоритм Хаффмана как раз на бинарных деревьях строится

    • @rypatokochev3387
      @rypatokochev3387 Рік тому

      @@user-ix4cm7ch5z попробуйте зипнуть видео, размер не уменьшиться практически никак

    • @user-pd8vg1gd5z
      @user-pd8vg1gd5z Рік тому

      Часть есть тут ua-cam.com/video/e4vMlLbYHWI/v-deo.html: про сжатие, его виды и фото

    • @Wave_ch
      @Wave_ch 10 місяців тому

      ​​@@user-ix4cm7ch5zотому что подавляющее большинство видеофайлов уже сжатые сами по себе, иначе 5-минутный видеоролик в Full-HD разрешении занимал бы несколько гигов места и, соответственно, каждый короткий ролик на Ютубе по времени загружался бы как полнометражный фильм