Data Science: Алгоритмы и Структуры данных
7.67K subscribers
456 photos
44 videos
6 files
3.39K links
Мы не претендуем на оригинальность контента, мы лишь собираем материал из открытых источников.

Ссылка: @Portal_v_IT

Сотрудничество, авторские права: @oleginc, @tatiana_inc

Канал на бирже: https://telega.in/c/structuredata
Download Telegram
Анализ данных на R в примерах и задачах

Видеокурс из двух частей от Computer Science Center

➡️Первая часть
➡️Вторая часть

Data Science: Алгоритмы и Структуры данных
Please open Telegram to view this post
VIEW IN TELEGRAM
Представление и свойства BST

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

Соответственно операции над BST:

1. Поиск по ключу
2. Вставка элемент в дерево
3. Обходы дерева

Data Science: Алгоритмы и Структуры данных
Алгоритм вставки в бинарное дерево поиска

Для вставки нового элемента в дерево вам придется сделать последовательность шагов:

1. Начните обход дерева с корня

2. Сравнивайте вставляемый элемент с корнем, если он меньше, чем корень , то выполните ркекурсивный вызов для левого поддерева, в противном случае для правого.

3. Достигнув конца, просто вставьте этот узел слева (если он меньше) или справа

Data Science: Алгоритмы и Структуры данных
SciPy — библиотека для языка программирования Python с открытым исходным кодом, предназначенная для выполнения научных и инженерных расчётов.

Data Science: Алгоритмы и Структуры данных
Алгоритм удаления из BST (дерева бинарного поиска)

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

1. Находим узел который собираемся удалить и удаляем

2. Если у удаляемого узла есть только один дочерний элемент, то скопируйте дочерний элемент в узел(где находился ваш удаляемый элемент), и удалите дочерний элемент у него.

3. Если два дочерних узла. Найдите в порядке приемника необходимый узел из двух дочерних. Скопируйте содержимое приемника и удалите приемника. Не забудьте правильно расположить 2 дочерний элемент, ведь он станет теперь дочерним для перемещенного приемника!

Data Science: Алгоритмы и Структуры данных
❤1
Shell Sort - сортировка массива

Новый вариант сортировки, который мы сегодня разберем - Shell Sort.

Этот алгоритм использует сортировку вставки для широко распространенных элементов, сначала сортируя их, а затем сортирует менее широко расположенные элементы. Этот интервал называется интервалом.

Данный интервал высчитывается при помощи формулы Кнута:

h = h * 3 + 1,

где h - интервал с начальным значением 1.

На картинке показан метод самой сортировки, однако позже мы его разберем более подробно!

Data Science: Алгоритмы и Структуры данных
TensorFlow.js: машинное обучение на JavaScript с доставкой в браузер

➡️Читать статью

Data Science: Алгоритмы и Структуры данных
Please open Telegram to view this post
VIEW IN TELEGRAM
Задача: за минимальное количество перестановок, найти сведение меньших или равных элементов к значению K

Дан массив из n натуральных чисел и числа K. Найдите минимальное количество перестановок, необходимое для сведение всех чисел, что равны или меньше числу К.

Алгоритм

1. Создайте счетчик count, занесите туда все элементы что меньше или равны K
2. Используя технику двух указателей и "двигающегося окна", длиной count. Отслеживайте таким образом сколько элементов в этом диапазоне больше К
3. Повторяйте шаг 2 до тех пор пока не закончатся окна длинной count и выбирайте среди них минимум плохих вариантов

Data Science: Алгоритмы и Структуры данных
Введение в динамическое программирование

Сам подход динамического программирования очень схож с принципом, который мы не давно с вами рассмотрели: "Разделяй и Властвуй".

То есть динамическое программироание - это тоже разбитие проблемы на более мелкие подзадачи. Однако разница между подходами есть! Подзадачи динамического программирования не решаются независимо. Данные результаты запоминаются и используются для аналогичных или перекрывающих подзадач.

Data Science: Алгоритмы и Структуры данных
Примеры использования динамического программирования

1. Ханойская башня
2. Кратчайший путь Дейкстры
3. Числовой ряд Фибоначи
4. Проблемы с рюкзаками, камнями и прочим набором задач, где надо сборка вещей
5. Все возможные пары кратчайшего пути по Флойд-Варшалл
6. Планирование

Data Science: Алгоритмы и Структуры данных
👍1
Этапы динамического программирования

1. Проблему делять на меньшую перекрывающую подзадачу

2. Оптимальное решение достигается при помощи использования оптимального решения небольших задач

3. Под капотом, всегда (почти всегда) используется memoization

Data Science: Алгоритмы и Структуры данных
👍2
Мемоизация (Memoization)

По факту - это всего лишь сохранение результатов выполнения функций, чтобы предотвратить повторные вычисления с теми же самыми параметрами.

Это один из способов оптимизаци, который применяется для увелечения скорости выполнения программ или подпрограмм.

Алгоритм работы:

1. Если функция не вызывалась, то вызвать ее и сохранить результат

2. Если вызывалась, достать сохраненный результат по ключу (к примеру по параметрам)

Как видно, мемоизацию можно организовать при помощи кэша(ключ-значение). В дальнейшем мы об этом более подробно поговорим!

Data Science: Алгоритмы и Структуры данных
👍1
animation_467.gif
89 KB
Быстрая сортировка (Quick Sort)

Быстрая сортировка - является высокоэффективным алгоритмом сортировки. Основана она на разбиении массива на меньше подмассивы. Большой массив делится на 2 более маленьких: один из них содержит значение меньше выбранного (pivot), другой больше значения pivot.

Базовая суть алгоритма представлена в GiF. Посмотрите ее внимательно!

Data Science: Алгоритмы и Структуры данных
Основа алгоритма Quick Sort

Как я уже говорил сегодня, суть алгоритма заключается в разделении массива на два подмассива.

Этот алгоритм эффективен для больших объемов данных, так как худшая сложность составит О(n^2)

Алгоритм

1. Выберите наибольшее значение индекса - в качестве pivot

2. Возьмите 2 переменные, чтобы указать левую и правую часть списка. Исключая наш pivot. Эта переменная и будет хранить наш массив слева и справа

3. Переупорядочьте массив, помещая элемент на его окончательно место

4. Отсортируйте рекурсивно элементы слева от разрешающего

5. Аналогично отсортируйте и правую сторону

Data Science: Алгоритмы и Структуры данных
Анализ данных и Deep Learning

1. Примеры применения анализа данных, стандартные задачи и методы
2. Методы решения задачи классификации и регрессии
3. Кластеризация
4. Преобразование признаков
5. Введение в Text Mining
6. Введение в Deep Learning
7. Deep Learning for Data with Sequence Structure
8. Рекомендательные системы
9. Прогнозирование временных рядов

➡️Смотреть видео

⬇️ Скачать видео

Data Science: Алгоритмы и Структуры данных
Please open Telegram to view this post
VIEW IN TELEGRAM
Найти наименьший/наибольший элемент в несортированном массиве

Дан массив и число k, где k меньше размера массива, нам нужно найти k-й наименьший элемент в данном массиве. При этом задано, что все элементы массива различны.

Data Science: Алгоритмы и Структуры данных
Решение проблемы в поиске наименьшего/наибольшего элемента

Алгоритм 1

Простое решение - отсортировать данный массив с помощью сортировки О(N log N). После чего вернуть элемент с индексом K-1 в отсортированном массиве

Алгоритм 2

Можно оптимизировать - создав минимальную кучу из заданных n элементов и вызвать стандартный метод extractMin (что такое Heap(куча) - мы как раз поговорим завтра)

Data Science: Алгоритмы и Структуры данных
Python: распознавание объектов в реальном времени

В этой статье мы будем разбирать код программы, в которой используется Deep Learning и OpenCV. Её суть: распознавание объектов в реальном времени.

➡️Читать статью

Data Science: Алгоритмы и Структуры данных
Please open Telegram to view this post
VIEW IN TELEGRAM
Heap (куча) - структура данных

Куча - это особая древовидная структура данных, в которой дерево представляет собой законченное двоичное дерево. Обычно кучи бывают 2х типов:

1. Max-Heap - ключ, в корневом узле, должен быть наибольшим среди ключей, присутсвующих во всех дочерних элементах. Это свойство рекурсивно истинно для всех последующих от корня узла

2. Min-Heap - полностью наоборот. То есть в корне находится самый минимальный элемент.

Data Science: Алгоритмы и Структуры данных
❤1
Представление Двоичной кучи

Как мы вчера уже поняли - двоичная куча - это полноценное двоичное дерево. Представляется куча в виде массива.

Корневой элемент будет всегда в arr0 (нулевом индексе массива). В табличке (на картинке) - как раз указано, как в дальнейшем берутся индексы.

Есть интересные свойства:

1. arr(i-1) / 2 - вернет всегда родительский узел

2. arr(2 * i) + 1 - вернет левый дочерний узел

3. arr(2 * i) + 2 - вернет правый дочерний узел

Data Science: Алгоритмы и Структуры данных
При помощи анимированных изображений и визуализаций слоев CNN-сетей раскрываем широко применяемое в моделях глубокого обучения понятие свертки.

➡️Читать статью

Data Science: Алгоритмы и Структуры данных
Please open Telegram to view this post
VIEW IN TELEGRAM