Data Science: Алгоритмы и Структуры данных
Открыть в Telegram
Мы не претендуем на оригинальность контента, мы лишь собираем материал из открытых источников. Ссылка: @Portal_v_IT Сотрудничество: @oleginc Канал на бирже: https://telega.in/c/structuredata
Больше7 622
Подписчики
Нет данных24 часа
-107 дней
-4930 дней
Архив постов
Быстрая сортировка (Quick Sort)
Быстрая сортировка - является высокоэффективным алгоритмом сортировки. Основана она на разбиении массива на меньше подмассивы. Большой массив делится на 2 более маленьких: один из них содержит значение меньше выбранного (pivot), другой больше значения pivot.
Базовая суть алгоритма представлена в GiF. Посмотрите ее внимательно!
Data Science: Алгоритмы и Структуры данных
Мемоизация (Memoization)
По факту - это всего лишь сохранение результатов выполнения функций, чтобы предотвратить повторные вычисления с теми же самыми параметрами.
Это один из способов оптимизаци, который применяется для увелечения скорости выполнения программ или подпрограмм.
Алгоритм работы:
1. Если функция не вызывалась, то вызвать ее и сохранить результат
2. Если вызывалась, достать сохраненный результат по ключу (к примеру по параметрам)
Как видно, мемоизацию можно организовать при помощи кэша(ключ-значение). В дальнейшем мы об этом более подробно поговорим!
Data Science: Алгоритмы и Структуры данных
Этапы динамического программирования
1. Проблему делять на меньшую перекрывающую подзадачу
2. Оптимальное решение достигается при помощи использования оптимального решения небольших задач
3. Под капотом, всегда (почти всегда) используется memoization
Data Science: Алгоритмы и Структуры данных
Примеры использования динамического программирования
1. Ханойская башня
2. Кратчайший путь Дейкстры
3. Числовой ряд Фибоначи
4. Проблемы с рюкзаками, камнями и прочим набором задач, где надо сборка вещей
5. Все возможные пары кратчайшего пути по Флойд-Варшалл
6. Планирование
Data Science: Алгоритмы и Структуры данных
Аналитику данных без математики не обойтись. Если вы мечтаете об этой професии, но ваши знания нужно обновить или подтянуть, в Яндекс Практикуме есть курс «Математика для анализа данных».
Курс подойдет:
Начинающим аналитикам
Начинающим специалистам по Data Science
Тем, кто готовится к собеседованиям в IT-компании
Студентам и выпускникам курсов по анализу данных
Как мы учим:
◼️Объясняем сложное простым языком, интерактивно и не скучно
◼️Разбираем бизнес-кейсы и каждый урок завершаем практикой
◼️Помогаем освоить навыки для работы и собеседований, объясняем и разбираем типовые задачи
На всех этапах вас поддержат:
◼️Преподаватели – ответят в чате и помогут с решением сложных задач
◼️Кураторы – напомнят о сроках и ответят на вопросы об учебном процессе
◼️Поддержка 24/7 – поможет с техническими вопросами
◼️Одногруппники – развеселят и обнимут
Оцените формат и пройдите бесплатный вводный урок: https://practicum.yandex.ru/math-for-da-ds/
Data Science: Алгоритмы и Структуры данных
Введение в динамическое программирование
Сам подход динамического программирования очень схож с принципом, который мы не давно с вами рассмотрели: "Разделяй и Властвуй".
То есть динамическое программироание - это тоже разбитие проблемы на более мелкие подзадачи. Однако разница между подходами есть! Подзадачи динамического программирования не решаются независимо. Данные результаты запоминаются и используются для аналогичных или перекрывающих подзадач.
Data Science: Алгоритмы и Структуры данных
Задача: за минимальное количество перестановок, найти сведение меньших или равных элементов к значению K
Дан массив из n натуральных чисел и числа K. Найдите минимальное количество перестановок, необходимое для сведение всех чисел, что равны или меньше числу К.
Алгоритм
1. Создайте счетчик count, занесите туда все элементы что меньше или равны K
2. Используя технику двух указателей и "двигающегося окна", длиной count. Отслеживайте таким образом сколько элементов в этом диапазоне больше К
3. Повторяйте шаг 2 до тех пор пока не закончатся окна длинной count и выбирайте среди них минимум плохих вариантов
Data Science: Алгоритмы и Структуры данных
TensorFlow.js: машинное обучение на JavaScript с доставкой в браузер
➡️Читать статью
Data Science: Алгоритмы и Структуры данных
Shell Sort - сортировка массива
Новый вариант сортировки, который мы сегодня разберем - Shell Sort.
Этот алгоритм использует сортировку вставки для широко распространенных элементов, сначала сортируя их, а затем сортирует менее широко расположенные элементы. Этот интервал называется интервалом.
Данный интервал высчитывается при помощи формулы Кнута:
h = h * 3 + 1,
где h - интервал с начальным значением 1.
На картинке показан метод самой сортировки, однако позже мы его разберем более подробно!
Data Science: Алгоритмы и Структуры данных
Алгоритм удаления из BST (дерева бинарного поиска)
Данный алгоритм очень схож с алгоритмом поиска. Поэтому по идее проблем с его пониманием не должно возникнуть. Кроме того, а что если у данного узла(что мы удаляем) - есть дочерние узлы. Что же, давайте рассмотрим данный алгоритм.
1. Находим узел который собираемся удалить и удаляем
2. Если у удаляемого узла есть только один дочерний элемент, то скопируйте дочерний элемент в узел(где находился ваш удаляемый элемент), и удалите дочерний элемент у него.
3. Если два дочерних узла. Найдите в порядке приемника необходимый узел из двух дочерних. Скопируйте содержимое приемника и удалите приемника. Не забудьте правильно расположить 2 дочерний элемент, ведь он станет теперь дочерним для перемещенного приемника!
Data Science: Алгоритмы и Структуры данных
SciPy — библиотека для языка программирования Python с открытым исходным кодом, предназначенная для выполнения научных и инженерных расчётов.
Data Science: Алгоритмы и Структуры данных
Алгоритм вставки в бинарное дерево поиска
Для вставки нового элемента в дерево вам придется сделать последовательность шагов:
1. Начните обход дерева с корня
2. Сравнивайте вставляемый элемент с корнем, если он меньше, чем корень , то выполните ркекурсивный вызов для левого поддерева, в противном случае для правого.
3. Достигнув конца, просто вставьте этот узел слева (если он меньше) или справа
Data Science: Алгоритмы и Структуры данных
Представление и свойства BST
Как мы вчера уже выяснили BST - набор узлов, расположенных по свойствам BST. Каждый узел имеет ключ и значение. При поиске задействуется сам ключ и сравнивается с ключами в BST, и если он найден - то возвращается значение.
Соответственно операции над BST:
1. Поиск по ключу
2. Вставка элемент в дерево
3. Обходы дерева
Data Science: Алгоритмы и Структуры данных
Анализ данных на R в примерах и задачах
Видеокурс из двух частей от Computer Science Center
➡️Первая часть
➡️Вторая часть
Data Science: Алгоритмы и Структуры данных
Двоичное дерево поиска
Двоичное дерево поиска(BST) - дерево, в котором все узлы следуют свойствам:
1. Левое поддерево узла имеет ключ, меньше или равный ключу его родительского узла
2. Правое поддерево узла имеет ключ больше, чем ключ родительского узла.
Таким образом дерево делит все свои поддеревью на два сегмента: левое и правое поддеревья. Есть еще одно определение данного дерева:
leftsubtree(keys) =< node(key) =< rightsubtree(keys)
Data Science: Алгоритмы и Структуры данных
Решение задачи через один только проход
Да, эту задачу можно решить также и тупо одним проходом, нам снова понадобиться 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
Data Science: Алгоритмы и Структуры данных
Настраиваем Python для машинного обучения на Windows
В этой статье рассказываем о возможностях Python для машинного обучения на Windows, описание дистрибутива Anaconda, процесс его установки и создание нейронной сети.
➡️Читать статью
Data Science: Алгоритмы и Структуры данных
Алгоритм решения задачи
Есть куча способов решить данную задачу. Ниже я приведу простой и интересный способ решить ее.
Пройдитесь по заданному массиву слева направо. Во время обхода поддерживайте количество ненулевых элементов в массиве (к примеру в счетчике count). Для каждого ненулевого элемента gjvtcnbnt элемент в arrcount и увеличьте сам count.
После полного обхода все ненулевые элементы уже будут перемещены во внешний интерфейс и count устанавливается как индекс нулевого элемента. Теперь все что нам остается - запустить цикл, который формирует все оставшиеся элементы нулевыми от count до конца самого массива.
Data Science: Алгоритмы и Структуры данных
Задача: переместить нули в конец
Дан массив случайных чисел, необходимо переместить все нули данного массива в конец. Например, если задан массив 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)
Data Science: Алгоритмы и Структуры данных
Топ-10 алгоритмов машинного обучения
В машинном обучении есть нечто, называемое теоремой «No Free Lunch». Вкратце, в ней говорится, что ни один алгоритм не работает лучше всего для каждой проблемы, и это особенно важно для контролируемого обучения (т.е. predictive modeling).
➡️Читать статью
Data Science: Алгоритмы и Структуры данных
