Всё про Алгоритмы и Структуры данных
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
Webinar Meetings – платформа для онлайн-встреч, совещаний и совместной работы. Входит в группу МТС, реестр отечественного ПО и рекомендована Министерством цифрового развития РФ.
С помощью Webinar Meetings можно:
→ Проводить масштабные совещания, где могут выступать одновременно до 100 человек.
→ Проводить scrum-встречи и брейнштормы с командой на доске Miro.
→ Фиксировать повестку встречи до ее начала. А после встречи повестка автоматически отправится на email всем участникам, даже опоздавшим.
→ Планировать и запускать онлайн-встречи прямо из Google Calendar.
→ Отправлять коллегам автоматически созданную запись прошедшей онлайн-встречи и многое другое.
Webinar Meetings работает без сбоев – встречи на платформе защищены от DDoS-атак злоумышленников.
МТС, Газпромнефть, Альфа-Банк, ВШЭ, РАНХиГС, Тинькофф и еще более 10'000 компании и ВУЗов уже перешли на Webinar Meetings.
Сделайте встречи еще эффективнее с Webinar Meetings. Протестируйте платформу бесплатно и получите базовый тариф навсегда!
Алгоритм вставки в бинарное дерево поиска
Для вставки нового элемента в дерево вам придется сделать последовательность шагов:
1. Начните обход дерева с корня
2. Сравнивайте вставляемый элемент с корнем, если он меньше, чем корень , то выполните ркекурсивный вызов для левого поддерева, в противном случае для правого.
3. Достигнув конца, просто вставьте этот узел слева (если он меньше) или справа
⚡️ Масштабный онлайн-хакатон MORE.Tech 4.0 с призовым фондом 1 100 000 ₽ от банка ВТБ!
🟣 DATA и WEB задачи: разработай профильную ленту бизнес-новостей или веб-сервис с элементами геймификации для сотрудников ВТБ.
Что будет:
🔹 Познакомишься с опытными IT-специалистами ВТБ;
🔹 Прокачаешься в разработке за 3 дня, как за месяц;
🔹 Лимитированный мерч;
🔹 Нетворкинг и другие приятные бонусы.
Если нет своей команды — поможем ее собрать, вступай в команду на платформе хакатона или найди ее в чате.
Регистрируйся и вступай в чат участников, получи ответы на волнующие вопросы, найди команду или создай свою.
▶️Прием заявок уже идет, первые 300 участников, загрузившие решение - получают фирменный мерч от ВТБ.
❗️Успевай подать заявку, жми на этот текст.
Представление и свойства BST
Как мы вчера уже выяснили BST - набор узлов, расположенных по свойствам BST. Каждый узел имеет ключ и значение. При поиске задействуется сам ключ и сравнивается с ключами в BST, и если он найден - то возвращается значение.
Соответственно операции над BST:
1. Поиск по ключу
2. Вставка элемент в дерево
3. Обходы дерева
Более 1660 русскоязычных книг по программированию и технологиям можно найти на канале Айти книга
Ничего лишнего.
@itbook_library
Двоичное дерево поиска
Двоичное дерево поиска(BST) - дерево, в котором все узлы следуют свойствам:
1. Левое поддерево узла имеет ключ, меньше или равный ключу его родительского узла
2. Правое поддерево узла имеет ключ больше, чем ключ родительского узла.
Таким образом дерево делит все свои поддеревью на два сегмента: левое и правое поддеревья. Есть еще одно определение данного дерева:
leftsubtree(keys) =< node(key) =< rightsubtree(keys)
В связи с тем, что GeekBrains, SkillBox, Яндекс.Практикум и им подобные частенько сносят каналы из-за сливов их курсов, мы приняли решения создать базу архивов, в которую не побоимся выкладывать дорогостоящие и эксклюзивные новинки курсов от топовых онлайн-школ.
🎯Сохраняем:
Архив с курсами SkillFactory (на 147 ГБ материалов)
Архив с курсами GeekBrains (Много курсов по SQL❗️228 ГБ файлов)
Архив с курсами Яндекс.Практикум (147 ГБ)
Архив с курсами SkillBox (322 ГБ)
Архив с курсами Нетология (47 ГБ)
Решение задачи через один только проход
Да, эту задачу можно решить также и тупо одним проходом, нам снова понадобиться count(счетчик). Только теперь, кроме него нам нужна дополнительная функция swap(которая меняет местами элементы)
Итого у нас будет изначально count = 0 и цикл от начала до конца нашего массива. Мы будем проверять, если наш текущий элемент не равен 0, мы будем менять местами count элемент и элемент на текущей i-ой позиции:
for
i in range(0, n):
if (arr[i] != 0):
arr[count], arr[i] = arr[i], arr[count]
count+=1Алгоритм решения задачи
Есть куча способов решить данную задачу. Ниже я приведу простой и интересный способ решить ее.
Пройдитесь по заданному массиву слева направо. Во время обхода поддерживайте количество ненулевых элементов в массиве (к примеру в счетчике count). Для каждого ненулевого элемента gjvtcnbnt элемент в arrcount и увеличьте сам count.
После полного обхода все ненулевые элементы уже будут перемещены во внешний интерфейс и count устанавливается как индекс нулевого элемента. Теперь все что нам остается - запустить цикл, который формирует все оставшиеся элементы нулевыми от count до конца самого массива.
Задача: переместить нули в конец
Дан массив случайных чисел, необходимо переместить все нули данного массива в конец. Например, если задан массив 1, 9, 8, 4, 0, 0, 2, 7, 0, 6, 0, необходимо его изменить к виду: 1, 9, 8, 4, 2, 7, 6, 0, 0, 0, 0.
Порядок остальных элементов должен остаться прежним. Сложность O(n), а пространство О(1)
Самое большое хранилище слитых платных книг для программирования уже в Telegram:
— 📚 Полка Разработчика
— 📖 Кладовая Книг
— 🗂 Архив Разработчика
🚽 IT Memes — свежий IT юмор, отобранный нейросетью.
🗞 3D News — актуальные новости из IT-индустрии.
Вращение в AVL-деревьях
Двойные повороты - достаточно сложная тема, но я нашел достаточно хорошее объяснение этому. Обратите ваше внимание на картинку. В данном случае представлено вращение влево-вправо.
Поворот влево-вправо - это комбинация вращений влево, за которым следует вращение вправо.
Есть аналогичное вращение вправо-влево, только оно с точностью наоборот. Сначала вращение вправо, а после уже влево!
Вставка в AVL дерево (словесное описание)
Предположим что новый узел называется w
Алгоритм:
1. Выполните стандартную вставку в BST для w узла
2. Начиная с w узла пройдите вверх и найдите первый несбалансированный узел. Пусть узел z будет первым несбалансированным узлом, у - будет потомком узла z, который приходит на пусть от w к z, а x - будет внуком z, у которого путь от w к z
3. Перебалансируйте дерево, выполнив соответствующие повороты поддерева с корнем z. Может быть 4 случая:
- у - является левым потомком z, а x - левым потомком y (left left case)
- y - левый дочерний элемент z, а x - правый дочерний элемент у (left right case)
- y - правый дочерний элемент z, а x - правй дочерний элемент y (right right case)
- y - является правым дочерним элементом z, а x - левым дочерним элементом y (right left case)
Алгоритм вставки в AVL-дерево
На картинке идеально и пошагово представлен алгоритм того: как происходит вставка элементов и после перебалансировка дерева.
Зачем вообще работать с AVL-деревьями ?
Логичный вопрос: который у вас мог произойти за это время, а зачем вообще использовать эти AVL деревья? Ведь есть же обычное бинарное дерево и с ним почти любая операция может занимать сложность O(h), где h - высота непосредственно дерева.
Однако стоимость операции поиска, вставки и удаления элементов может становится и хуже, к примеру O(n). Становится оно хуже из-за того, что само бинарное дерево может быть искаженным и иметь например мелкое левое поддерево и очень большое правое.
AVL деревья нам гарантирует, что высота дерева остается O(logN) после каждой вставки и удаления. Соответственно эта гарантия дает нам возможность говорить, что это и есть верхняя граница любого нашего алгоритма поиска, вставки и удаления.
4PDA теперь в Telegram!
4PDA – крупнейший в рунете тематический ресурс, посвященный технологиям, приложениям и кодингу. Специально для программистов у них появился официальный канал в телеграм, где вы увидите сливы платных курсов, интересные статьи и много другого!
Подписывайтесь: @4pda_forum
AVL деревья
AVL - это самобалансирующееся двоичное дерево поиска (BST), в котором разница между высотами левого и правого поддеревьев не может быть больше единицы для всех узлов.
Вышеупомянутое дерево - является AVL, потому что разница между высотами левого и правого поддеревьев составляет для каждого узла не меньше 1.
Также можно обратить внимание на картинке как раз на балансировочный фактор, о которым мы поговорим далее.
Решение задачи: абсолютная разница между 2 числами
Ну что давайте подумаем над решением?
Самое очевидное и прямолинейное, это взять и пройтись по каждому элементу каждого массива и найти наименьшую разницу таким образом. Чем плох данный проход? Ну например тем, что будет слишком много итераций.
Как же ускорить данный алгоритм? Для этого есть подход по работе с массивами использовать собственные указатели. Давайте возьмем 2 массива и сначала их отсортируем, а после поставим на каждом указатель в начальное состояние. И будем сравнивать значения. Если в первом массиве значение меньше чем во втором, то двигаем только первый указатель(первого массива), если наоборот - то двигаем второй указатель. Всегда записываем в переменные только те значения, которые реально меньше. Дойдя до конца одно из массива мы со смелостью сможем сказать, что в сохраненных значениях(самого лучшего результата) будет нашим финальным результатом.
Задача: наименьшая разница
Напишите функцию, которая на входе принимает 2 массива целочисленных чисел и находит пару чисел (из каждого массива по одному) где абсолютная разница между ними близка или равна 0. Вернуть массив, который содержит 2 эти цифры: на первой позиции число с первого массива, на второй позиции число со второго массива.
Нейросеть научили создавать обнажённых женщин. Ребята из ИИ уже выкатили инструкцию, как собрать свою женщину. Фулл в закрепе: https://t.me/+wqQ2vzTlxpw5YWJi
Available now! Telegram Research 2025 — the year's key insights 
