Data Science: Алгоритмы и Структуры данных
الذهاب إلى القناة على Telegram
Мы не претендуем на оригинальность контента, мы лишь собираем материал из открытых источников. Ссылка: @Portal_v_IT Сотрудничество: @oleginc Канал на бирже: https://telega.in/c/structuredata
إظهار المزيد7 575
المشتركون
-324 ساعات
-197 أيام
-6630 أيام
أرشيف المشاركات
Свойства биномиального дерева
1. У данного дерева 2К узлов
2. Глубина дерева равна К
3. На глубине i имеется ровно kCi узлов для i = 0, 1, ..., k
4. Корень дерева имеет степень k, а потомки корня сами являются биномиальными деревьями с порядком k-1, k-2,..0 слева направо
Хабр теперь в Telegram!
Подписывайтесь: @habr_articles
Биномиальная куча
Основным применением двоичной кучи является реализация очереди приоритетов. Биномиальная куча - это расширение обычной двоичной кучи, которое обеспечивет более быструю операцию объеденения или слияния.
Биномиальное дерево порядка 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 - вернет правый дочерний узел
Heap (куча) - структура данных
Куча - это особая древовидная структура данных, в которой дерево представляет собой законченное двоичное дерево. Обычно кучи бывают 2х типов:
1. Max-Heap - ключ, в корневом узле, должен быть наибольшим среди ключей, присутсвующих во всех дочерних элементах. Это свойство рекурсивно истинно для всех последующих от корня узла
2. Min-Heap - полностью наоборот. То есть в корне находится самый минимальный элемент.
В сеть слили ссылки на 3 топовых канала! Успей, пока не сменили:
• Бесплатные авторские видеоуроки и курсы — IT-EX | Уроки программирования
• Самая топовая IT-литература — Просто IT книги
Подпишись, и получай порцию годного контента каждый день!
Решение проблемы в поиске наименьшего/наибольшего элемента
Алгоритм 1
Простое решение - отсортировать данный массив с помощью сортировки О(N log N). После чего вернуть элемент с индексом K-1 в отсортированном массиве
Алгоритм 2
Можно оптимизировать - создав минимальную кучу из заданных n элементов и вызвать стандартный метод extractMin (что такое Heap(куча) - мы как раз поговорим завтра)
Найти наименьший/наибольший элемент в несортированном массиве
Дан массив и число k, где k меньше размера массива, нам нужно найти k-й наименьший элемент в данном массиве. При этом задано, что все элементы массива различны.
Основа алгоритма Quick Sort
Как я уже говорил сегодня, суть алгоритма заключается в разделении массива на два подмассива.
Этот алгоритм эффективен для больших объемов данных, так как худшая сложность составит О(n^2)
Алгоритм
1. Выберите наибольшее значение индекса - в качестве pivot
2. Возьмите 2 переменные, чтобы указать левую и правую часть списка. Исключая наш pivot. Эта переменная и будет хранить наш массив слева и справа
3. Переупорядочьте массив, помещая элемент на его окончательно место
4. Отсортируйте рекурсивно элементы слева от разрешающего
5. Аналогично отсортируйте и правую сторону
3D News — самые актуальные и интересные новости из IT-индустрии:
— Youtube пофиг, нравится тебе контент или нет;
— Зарплаты IT-специалистов в России стали снижаться;
— Энтузиаст за пять лет выкопал весь игровой мир в Minecraft.
Также откопали сливы платных IT-книг:
— 📚 Полка Разработчика
— 📖 Кладовая Книг
— 🗂 Архив Разработчика
🚽 IT Memes — свежий IT юмор, отобранный нейросетью.
Быстрая сортировка (Quick Sort)
Быстрая сортировка - является высокоэффективным алгоритмом сортировки. Основана она на разбиении массива на меньше подмассивы. Большой массив делится на 2 более маленьких: один из них содержит значение меньше выбранного (pivot), другой больше значения pivot.
Базовая суть алгоритма представлена в GiF. Посмотрите ее внимательно!
Мемоизация (Memoization)
По факту - это всего лишь сохранение результатов выполнения функций, чтобы предотвратить повторные вычисления с теми же самыми параметрами.
Это один из способов оптимизаци, который применяется для увелечения скорости выполнения программ или подпрограмм.
Алгоритм работы:
1. Если функция не вызывалась, то вызвать ее и сохранить результат
2. Если вызывалась, достать сохраненный результат по ключу (к примеру по параметрам)
Как видно, мемоизацию можно организовать при помощи кэша(ключ-значение). В дальнейшем мы об этом более подробно поговорим!
