Всё про Алгоритмы и Структуры данных
前往频道在 Telegram
Мы не претендуем на оригинальность контента, мы лишь собираем материал из открытых источников. Ссылка: @Portal_v_IT Сотрудничество, авторские права: @oleginc, @tatiana_inc Канал на бирже: https://telega.in/c/structuredata
显示更多7 756
订阅者
-124 小时
-37 天
-2530 天
帖子存档
Представление графов
Тут тоже не всё так просто! Граф можно представить 2мя часто используемыми способами:
1. Матрица смежности
2. Список смежности
На самом-то деле есть и другие способы представления: Incidence List or Matrix.
Выбор того или иного представления сильно зависит от ситуации. По факту вам должно быть достаточно просто использовать нужные вам операции с графом. Чем проще - тем лучше
Кодим на коленке - прогерское комьюнити, а также все про бэкенд-разработку на Python, Java, C++, C#, PHP в коротких поленых статьях
Структура данных: Граф
Пока вы решаете сложную задачу, мы перейдем к не менее сложной теме: графы!
Граф состоит из конечного набора вершин(узлов) и набора ребер, которые соединяют пару узлов.
Графы используются для решения многих реальных задач. К примеру для представления сетей: городских или телефонных или даже компьютерных сетей. Также представление графа заложено почти в каждой социальной сети.
Решение задачи: отсортировать почти отсортированный массив
Я же не зря завел данную задачу, аккуратно после темы кучи (Heap). Как раз подобный вид сортировки - лучше сделать как раз при помощи Heap!
Алгоритм
1. Создайте минимальную кучу (min Heap) размера k + 1, с первыми элементами k + 1 (это кстати у вас займет где-то O(k)
2. Один за другим удалите минимальный элемент из кучи, помещая элемент в массив результатов и добавьте новый элемент в кучу из оставшихся элементов
Задача: отсортировать почти отсортированный массив
Дан массив из n элементов, где каждый элемент находится не более чем на k от своей целевой позиции. Разработайте алгоритм, который выполняет сортировку за время O(n log k)
Сортировка кучей (HeapSort)
Алгоритм сортировки в куче для сортировки в порядке возрастания:
1. Создайте максимальную кучу из входных данных.
2. На этом этапе самый большой элемент хранится в корне кучи. Замените его последним элементом кучи, а затем уменьшите размер кучи на 1. Наконец, скопируйте корень дерева.
3. Повторите шаг 2, пока размер кучи больше 1.
Операции над биномиальной кучей
1. insert(H, k) - вставкляет ключ К в биномиальную кучу H. Эта операция сначала создает биномиальную кучу с одним ключом, а затем вызывает объеденение для H
2. getMin(H) - пройдется по списку корней биномиальных деревьев и выдаст вам минимальный ключ
3. extractMin(H) - сначала вызывается метод getMin(), чтобы найти минимальное ключевое значение, после чего создаст новое биномиальное дерево, правильно его отформатировав
4. delete(H) - операция удаления, как и с операцией удаления в бинарном дереве: сначала уменьшает ключ до минус бесконечности, а после вызывает extractMin()
5. reduceKey(H) - сравниваем ключ уменьшения с ключом родительским, и если родительский ключ больше , мы меняем ключи и повторяем для родительского узла. Останавливаемся тогда, когда родительский элемент имеет наименьший ключ.
6. union - операция объеденения, которая используется во многих других функциях, как вы могли наблюдать.
Курс «Английский для аналитиков» от Яндекс Практикума
Для специалистов, которые хотят изменить свою профессиональную жизнь и работать в международной команде. Обучение построено вокруг рабочих ситуаций и полезных для карьеры навыков:
• Самопрезентация. Рассказ о своей роли, задачах, сфере ответственности на поведенческом интервью и в неформальной беседе.
• Работа в команде. Стендапы, планирование спринтов, демонстрация навыков командной работы на собеседовании.
• Общение с заказчиками и исполнителями. Сбор требований у стейкхолдеров и постановка задач для разработчиков.
• Презентация результатов работы. Выступление на митапах, неформальное общение с коллегами из отрасли.
• Обсуждение решений по проекту. Генерация и аргументация идей, участие в мозговых штурмах.
• Рефлексия и самоанализ. Ретроспектива, ревью, ответы на сложные вопросы.
Запишитесь на бесплатную консультацию. Определим ваш уровень языка, расскажем про обучение и ответим на все вопросы
Свойства биномиального дерева
1. У данного дерева 2К узлов
2. Глубина дерева равна К
3. На глубине i имеется ровно kCi узлов для i = 0, 1, ..., k
4. Корень дерева имеет степень k, а потомки корня сами являются биномиальными деревьями с порядком k-1, k-2,..0 слева направо
Биномиальная куча
Основным применением двоичной кучи является реализация очереди приоритетов. Биномиальная куча - это расширение обычной двоичной кучи, которое обеспечивет более быструю операцию объеденения или слияния.
Биномиальное дерево порядка 0 имеет 1 узел. Кго уровня можно построить, взяв два биномиальных дерева порядка к-1 и сделав одно из них крайним левым дочерним элементом.
Для тех кто просил, открываем доступ в секретный канал на 2 ЧАСА👇
https://t.me/+Xw80YhSbTEpiNWJi
Скинуть секретный архив с платными материалами и книгами для программистов?
Операции над Min Heap
1. getMin - возвращает корневой элемент вашего Min Heap
2. extractMin - удаляет минимальный элемент из MinHeap (сложность О(logN) из-за того что надо поддерживать свойства кучи)
3. reduceKey - уменьшает значение ключа (так же сложность O(logN)
4. insert - вставка нового элемента (занимает также O(logN)) Добавит вам новый ключ в конец дерева, если новый ключ больше, чем родительский, вам не придется ничего делать. В противном случае нужно пройти вверх, чтобы исправить свойства кучи
5. delete - удаление ключа (также займет в худшем случае O(logN)
Скинуть секретный архив с платными материалами и книгами для программистов?
Головокружительное начало в ИТ в ваших руках✨
Прогнозировать будущее сложно, но возможно. Университет Иннополис приглашает на ИТ-курсы учеников 8-11 классов. Два года обучения, и новые навыки получены. Выбирайте, что больше нравится:
Разработка 2D-игр на Python
Telegram-боты на Python
Разработка парсеров
Разработка графических интерфейсов
Приходите 28 сентября в 17:00 на вебинар, где мы расскажем, как еще в школе получить первые ИТ-навыки. Регистрируйтесь по ссылке, чтобы ничего не пропустить.
⚡️ Создали нейросеть, которая отбирает лучшие материалы для изучения Python:
• Бесплатные курсы
• Обучающие видео на YouTube
• Шпаргалки
• Книги
Сохраняй канал и учи Python по материалам от нейросети:
t.me/pythonguru
⚡️ Создали нейросеть, которая отбирает из всего интернета лучшие материалы для изучения программирования:
- Сливы платных курсов
- Обучающие видео на YouTube
- Шпаргалки
- Книги
Зайди и посмотри, что же нейросеть считает полезным для изучения - t.me/codehunter
⚡️ В канал CodeHunter слили платные курсы стоимостью более 850 тыс. ₽. Вот некоторые из них:
• [Stepik] Big Data для Data Science - 19,999₽ бесплатно на Сode Hunter
• [Geek Brains] Java - учимся на практике - 17,499р бесплатно на Сode Hunter
• [Stepik] Django 3 - Full Stack разработка веб-сайтов на Python - 15,999₽ бесплатно на Сode Hunter
• [HTML academy] Онлайн‑курс Vue js для опытных разработчиков - 15,999₽ бесплатно на Сode Hunter
Представление Двоичной кучи
Как мы вчера уже поняли - двоичная куча - это полноценное двоичное дерево. Представляется куча в виде массива.
Корневой элемент будет всегда в arr0 (нулевом индексе массива). В табличке (на картинке) - как раз указано, как в дальнейшем берутся индексы.
Есть интересные свойства:
1. arr(i-1) / 2 - вернет всегда родительский узел
2. arr(2 * i) + 1 - вернет левый дочерний узел
3. arr(2 * i) + 2 - вернет правый дочерний узел
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
