Всё про Алгоритмы и Структуры данных
Open in Telegram
Мы не претендуем на оригинальность контента, мы лишь собираем материал из открытых источников. Ссылка: @Portal_v_IT Сотрудничество, авторские права: @oleginc, @tatiana_inc Канал на бирже: https://telega.in/c/structuredata
Show more7 756
Subscribers
-124 hours
-37 days
-2530 days
Posts Archive
DFS or BFS
Какой же алгоритм выбрать? Всегда становится именно вопрос в этом. На самом деле оба алгоритма рекурсивные и затрачивают определенные ресурсы. Однако, вам необходимо понять, что вам необходимо найти (или что ближе к тому, что мы пытаемся найти)
Ведь как мы уже обнаружили DFS - работает от листьев к корню, а BFS от корня к листьям. Соотвественно самый простой выбор будет заключаться в том, что если мы ищем корневые элементы - лучше применить BFS. Если же больше интересны листья - DFS
BFS и DFS обходы двоичного дерева
BFS - обход дерева в ширину (по факту по порядку уровней)
DFS - обход в глубину, причем бывает несколько видов.
1. Inorder (левый-корень-правый)
2. Preorder (корень-левый-правый)
3.Postorder (левый-правый-корень)
Давайте обратим внимание на пример (на картинке)
BFS такого дерева был бы:
A B C D E F
DFS Preorder: A B C E D F
DFS Inorder: B A E C F D
DFS Postorder: B E C F D A
💥Что тебя ждёт на курсе Алгоритмы и структуры данных?
👉🏻Поддержка от предподавателя 24/7
👉🏻Интересные и полезные практические задания
👉🏻Ты научишься применять алгоритмы и структуры данных при разработке программ
👉🏻Ты сможешь подготовиться к техническому собеседованию и продвинутой разработке
Познакомиться с курсом подробнее: https://proglib.io/w/d2263cd0
К концу курса ты получишь практический опыт решения сложных алгоритмических задач и сможешь легко пройти техническое собеседование
Начни учиться уже сейчас со скидкой в 15% по промокоду PROGRAMMIST
Реализация удаления на Python 3
Для того чтобы это все заработало, нам нужно еще 2 вещи: во-первых, иметь класс самой Node (можете взять с прошлой реализации вставки), а также проход по дереву inorder (который также можете взять с прошлой реализации).
Алгоритм удаления узла из бинаного дерева
1. Начинаем с корня, находить самый глубокий и самый правый узел в двоичном дереве и узел, который мы хотим удалить
2. Заменяем данные самого глубокого правого узла, узлом который хотим удалить.
3. Затем удаляем самый глубокий правый узел.
На картинке вы можете увидеть как это происходит и почему я говорю о самом глубоком правом узле, как об основной точке отправления
Repost from Security Vision
Мы продолжаем создавать короткие видеоролики, в которых просто и доступно рассказываем о продуктах бренда Security Vision. Новое видео наглядно демонстрирует процессы применения модуля «Управление активами и инвентаризация» и будет интересно техническим специалистам, которые хотят подробно ознакомиться с тем, как строится работа с ним на практике: https://youtu.be/_zvVaiI0auA
Алгоритм вставки в бинарное дерево
Идея состоит в том, чтобы выполнить итеративных обход заданного дерева по порядку уровней с помощью (как ни странно) очереди! Если мы находим узел, левый дочерний жлемент которого пуст, мы делаем новый ключ левым дочерним элементом узла.
Иначе, если мы найдем узел, правый дочерний элемент, которого пуст, мы сделаем новый ключ правым дочерним элементом.
Мы продолжим обходить дерево, пока не найдем узел, у которого либо слева, либо справа пусто.
Слили все платные курсы Skillbox, Udemy , GeekBrains и ещё 10 онлайн-школ.
В результате утечки 32000 платных курсов выложили в закрытый канал «Кодим на Коленке» компании потеряли более 12 миллионов рублей.
Это праздник для всех, кто не был готов платить 50-200 тысяч рублей за одно обучение.
Успейте пройти курс по любой специальности бесплатно:
https://t.me/+d2il5ra2qkhjMGZi
Handshaking Lemma(Лема рукопожатий)
Лема о рукопожатии в основном касается неориентированного графа. В каждом конечном неориентированном графе четное число вершин всегда будет иметь нечетную степень(формула на картинке).
Полезность для бинарных деревьев
В основном полезность данной леммы заключается в том, что мы можем доказать определенные свойства.
1. В н-ом дереве, где каждый узел имеет либо 0 либо n дочерних элементов, всегда истино:
L = (n - 1) * I. + 1
где L - количество листовых узлов
I - количество внутренних узлов
2. В двоичном дереве количество конечных узлов всегда на единицу больше, чем узлов с двумя дочерними элементами
Оба свойства доказываются через лемму рукопожатий
Microsoft выкупила Habr!
По данным некоторых источников Habr был выкуплен за более чем 200 000 000 долларов. После чего было создано объединенное с GitHab'ом сообщество. Вот ссылка на русскоговорящую версию:
https://t.me/+gIiUM2B7voo4M2Uy
Типы бинарных деревьев
На самом деле у бинарных деревьев есть еще и типизация и они бывают разных видов. Давайте разберемся в этом.
1. Full (Заполненное двоичное дерево) - таким дерево можно назвать: если у каждого узла есть 0 или 2 дочерних элемента. То есть по факту это деревья, которые либо имеют дочерние элементы (2шт), либо не имеют вовсе.
2. Complete (полное двоичное дерево) - дерево, если все уровни полностью заполнены, кроме, возможно последнего уровня. На последнем уровне допускается один ключ слева
3. Degenerate (патологическое дерево) - дерево в котором каждый внутренний узел имеет только один дочерний элемент. Производительность таких деревьев - полностью совпадает с LinkedList
4. Perfect (идеальное дерево) - дерево, в котором все узлы имеют по 2 дочерних элемента, а все конечные узлы находятся на одинаковом уровне вложенности
5. Balanced (балансированное дерево) - двоичное дерево сбалансировано, если высота дерева равна O(Log N), где N - количество узлов.
3 канала, которые сделают из новичка опытного прогера и устроят на работу
Первый делом подписывайся на IT подкасты: сборник лучших подкастов от преподавателей, топов рынка с разборами задач, советами по изучению и рекомендации для новичков.
Затем начинай изучать книги в Книжном хранилище — самая большая база, более 2000 русскоязычных книг по PHP, Java, DB, Python, C, C++ ,C#, фронтенду и алгоритмам.
И напоследок заходи в IT Jobs — ежедневные вакансии для новичков и мидлов, а также подборки советов по трудоустройству от ведущих IT-компаний.
Алгоритм вставки в бинарное дерево
Как я вчера и сказал, самая первая вставка - будем нам создавать дерево. После того, как у нас уже первый элемент есть, будет производиться правильное местоположение для нового элемента, что мы хотим вставить
Начинается все с корневого узла, если данные меньше - пойдем по левому поддереву, в противном случае пойдем по правому поддереву
Linux теперь оффициально в Telegram!
Обучение этой OC, полезные фишки и инструменты, обзоры дистрибутивов, этичный хакинг.
Присоединяйся: @linux
Основные операции над бинарным деревом поиска
Пора разобраться и с основными операциями данного дерева!
1. Вставка - вставляет элемент в дерево/создает дерево (если до этого элементов не было)
2. Поиск - поиск элемента в дереве
3. Обход дерева - бывает три типа preorder, postorder и inorder.
Inorder - это когда мы начинаем с левого поддерева, потом берем корень и только потом переходим к правому поддереву и его обходу
Preorder - когда мы начинаем с корня и спускаемся сначала влево, а потом переходим в право
Postorder - сначала обходим все слева, потом все справа и только потом подымаемся к корню дерева
Представление дерева двоичного поиска
Дерево бинарного поиска обладает, особыми свойствами.
Левый потомок узла должен иметь меньшее значение его родителя, а правый потомок должен иметь большее значение, чем значение родителя.
Как видите на картинке, представлен один из таких представителей.
#BST
Не нужно тратить деньги на топовые курсы по программированию — их выложили на YouTube бесплатно
Все найденные мы собираем в нашем архиве – https://t.me/+v20XLr3F3P04ZTY6
По этим курсам выучить любой язык за 7 дней вообще не проблема, находка для начинающих программистов. С вас 👍
Основные определения дерева
На самом деле, я не очень люблю формальности, однако тут они очень важны. Разберем сегодня основные термины дерева.
1. Путь - последовательность узлов, по которому производится проход
2. Корень - узел верхней части дерева. Существует только один корень на все дерево
3. Родетель - любой узел, кроме корня, который имеет хотя бы один дочерний элемент
4. Дочерний - соответственно это узел, у которого есть родитель
5. Лист - узел, у которого нет дочернего узла
6. Поддерево - Потомок корня дерева, у которого есть свои дочерние элементы (на картинке видно)
7. Обход - прохождение через узлы в определенном порядке
8. Уровни - уровень узла это его поколение
9. Ключи - то по чему и ищется необходимый вам узел
Бесплатные обучающие видеоуроки, которые лучше платных
https://t.me/+2vFqPebYY8RkMThi
p.s информация дополняется
Available now! Telegram Research 2025 — the year's key insights 
