Всё про Алгоритмы и Структуры данных
8.77K subscribers
300 photos
30 videos
5 files
1.47K links
Мы не претендуем на оригинальность контента, мы лишь собираем материал из открытых источников.

Ссылка: @Portal_v_IT

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

Канал на бирже: https://telega.in/c/structuredata
Download Telegram
Связные списки: объяснение и реализация на JavaScript

В связном списке данные хранятся друг за другом. При этом в каждом элементе списка содержится поле с данными и поле с ссылкой на следующий элемент.

В видео показано, как реализовать собственный связный список со всеми необходимыми методами:

https://youtu.be/QdCyTTid9-U
Слышали ли вы о гипотезе Коллатца?

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

Попробуйте загадать любое целое положительное число и затем следуйте простому алгоритму:
1. Если число чётное, разделите его на 2. Иначе умножьте его на 3 и прибавьте 1.
2. Повторите шаг 1 с полученным числом.

Подробнее об этом фокусе читайте здесь: https://tprg.ru/eApw
Решаем задачу о поиске пары ближайших точек

Представьте, что перед вами множество точек. Как найти пару точек, которые будут находиться на минимальном расстоянии друг от друга?

Одно из решений задачи сводится к использованию метода «разделяй и властвуй». Более подробно о нём рассказано в видео с примером реализации на Python:

https://youtu.be/Dx5eiQdv4k8
Алгоритм Евклида

В задачах по программированию нередко требуется найти наибольший общий делитель (НОД) двух чисел. Для решения используют алгоритм Евклида.

Мы нашли ресурс, на котором просто объясняется, как работает алгоритм Евклида в двух вариациях: через деление и через вычитание. А примеры реализации нахождения НОД написаны на Python.

Ссылка: https://younglinux.info/algorithm/euclidean
Изучаем числа Фибоначчи

В этом видео вы познакомитесь с понятием числа Фибоначчи, а также узнаете, как написать программу на Java, вычисляющую требуемое число Фибоначчи:

https://youtu.be/2kSx7wMAhcc
Как работает ArrayList

ArrayList — это класс, который выполняет функции массива в Java и обладает несколькими полезными методами.

Если вы не можете разобраться до конца, как он работает, то в статье наглядно показано, что происходит в массиве во время операций:

https://javarush.ru/groups/posts/1936-rabota-arraylist-v-kartinkakh--
Визуализация поиска пути в клетчатом лабиринте

На GitHub есть интересный интерактивный инструмент, где вы можете построить свой лабиринт и посмотреть, как работают различные алгоритмы поиска пути в графе.

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

Поиграться: https://qiao.github.io/PathFinding.js/visual/
Реализация множества алгоритмов и структур данных на C#

На GitHub можно найти много полезного. В том числе крутой репозиторий, в котором собраны реализованные на C# алгоритмы и структуры данных.

Рекомендуем посмотреть хотя бы на популярные алгоритмы, например сортировки или алгоритмы поиска.

Где покопаться в коде: https://github.com/TheAlgorithms/C-Sharp
​Структура данных пирамида (двоичная куча) в Java

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

Подробнее о пирамиде и её реализации на Java:

https://javarush.ru/groups/posts/3083-strukturih-dannihkh-piramida-dvoichnaja-kucha-v-java
Media is too big
VIEW IN TELEGRAM
Визуализация 16 сортировок

Написано полностью на Java. Предупреждаем, можете залипнуть.

Исходники на GitHub: https://github.com/w0rthy/ArrayVisualizer
​Красно-чёрное дерево: что это за структура и как понять его свойства

Студенты технических специальностей часто сталкиваются с понятием красно-чёрного дерева (КЧД). Эта структура данных относится к бинарным деревьям поиска и позволяет сделать вставку, удаление и поиск нужного элемента за время O(log n).

Чтобы понять основные принципы построения КЧД, можно сначала изучить 2-3 дерево. Если его превратить в бинарное дерево, то оно будет красно-чёрным. Подробнее об этом — в статье:

https://tproger.ru/articles/ponimaem-krasno-chjornoe-derevo-chast-1-vvedenie
​Зачем на собеседованиях спрашивают про алгоритмы?

Причин несколько:
— В процессе работы вы можете сменить много раз язык разработки и используемые фреймворки. Но знание алгоритмов — это некая общая база, которая позволит легко переключиться между технологиями.
— Вероятно, вам дадут задачи и спросят про алгоритмы и структуры данных, которые мало используются в реальных проектах. Так компания хочет проверить, насколько вы заинтересованы в работе.

Об этом подробно рассказал разработчик, который проводит алгоритмические секции собеседований в «Яндекс»:

https://youtu.be/oB_FEwky2wo
​Алгоритмы и структуры данных на JavaScript

Всего за час вы узнаете о таких алгоритмах на JS, как поиск, сортировка, обходы графа, деревьев и кеширование. Кроме того, в ролике рассмотрены структуры данных, которые активно используются в разработке: массивы, списки, деревья, стек, очередь, сет и map:

https://youtu.be/NErrGZ64OdE

Весь код из видео: https://github.com/utimur/algs_and_structures_course
​Создание и обход двоичного дерева, а также реализация на JavaScript

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

Статья поможет реализовать на JavaScript двоичное дерево и организовать обход его узлов:
https://tprg.ru/09wZ
Введение в теорию графов

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

Статья детально разбирает ключевые элементы теории графов:

https://proglib.io/p/graph-theory
Какие алгоритмы и структуры данных нужно освоить начинающему специалисту по Data Science?

Поскольку Data Science — это огромная область, в которой легко заблудиться новичку, мы спросили у экспертов, какие алгоритмы и структуры данных нужно знать в первую очередь. Их ответы вы найдёте в статье:

https://tproger.ru/experts/data-science-algorithms
Что такое задача коммивояжёра?

В математике и программировании задача коммивояжёра является классической. Суть её проста:

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

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

https://telegra.ph/CHto-takoe-zadacha-kommivoyazhyora-03-31
Введение в криптографию и шифрование

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

https://habr.com/ru/company/yandex/blog/324866/

Лекция на YouTube: https://youtu.be/mE_s-R5wvpw
Алгоритмы и структуры данных: примеры реализаций на JavaScript

Если вы изучаете JavaScript, загляните в репозиторий на GitHub, в котором собраны реализации структур данных и множества популярных алгоритмов. К каждому алгоритму приложено короткое пояснение, которое поможет разобраться в коде.

Весь материал разделён на два уровня: для начинающих и для продвинутых:

https://github.com/trekhleb/javascript-algorithms