Share This
Связаться со мной
Крути в низ
Categories
//12 алгоритмов в программировании

12 алгоритмов в программировании

Алгоритмы давно заняли особую нишу как в Computer Science, так и в разработке ПО. Однако какую роль они играют в жизни разработчика и что конкретно из них следует изучить и знать? Об этом вы узнаете из нашей статьи.

12 algoritmov v programmirovanii bd8f8ce - 12 алгоритмов в программировании

Сейчас среди начинающих разработчиков распространено заблуждение, что зазубривание стандартных алгоритмов имеет важное значение. Для прохождения собеседования на некоторые вакансии это действительно так, но в повседневной деятельности оно не особо важно для того, чтобы быть успешным разработчиком.

Так неужели знания в области алгоритмов бесполезны? Конечно, нет. Что по-настоящему важно, так это умение думать алгоритмически. Не только чтобы воспроизводить и изменять стандартные алгоритмы, но и чтобы вам было комфортно использовать код для решения задач, с которыми вы столкнетесь в роли разработчика.

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

Бинарный поиск

Бинарный поиск – это одна из первых вещей, с которыми сталкиваются в начале изучения computer science. Это возможно самый простой пример того, как немного изобретательности может сделать решения, в буквальном смысле, экспоненциально более эффективными.

Его суть в том, что нам дан отсортированный массив. Необходимо итеративно делить его пополам, брать значение в середине и сравнивать его с элементом, который хотим найти: если он больше – ищем в правой половине, если меньше – в левой. И так до тех пор, пока элемент не будет найден.

12 algoritmov v programmirovanii 14c142f - 12 алгоритмов в программировании

Бинарный поиск. Источник: brilliant.org

Сортировки пузырьком, выбором, вставками

Алгоритмы сортировки – один из фундаментальных инструментов, которые разработчик должен иметь в своем арсенале. Квадратичные сортировки (пузырьком, выбором, вставками) – первое, что следует проработать начинающему разработчику. В случае когда скорость имеет значение, вы вряд ли будете их использовать, но работа с ними является хорошим введением в работу с массивами.

12 algoritmov v programmirovanii b542f02 - 12 алгоритмов в программировании

Сортировки пузырьком. Источник: Wikipedia

12 algoritmov v programmirovanii 3433f24 - 12 алгоритмов в программировании

Сортировка выбором. Источник: Codepumpkin.com

12 algoritmov v programmirovanii 04cfcba - 12 алгоритмов в программировании

Сортировка вставками. Источник: Studiousguy.com

Быстрая сортировка и сортировка слиянием

Как было сказано выше, алгоритмы сортировки отлично подходят, чтобы научиться чувствовать себя комфортно при работе с массивами, но быстрая сортировка и сортировка слиянием достаточно эффективны, чтобы использоваться в реальных приложениях. Умение с легкостью реализовывать их (Заметьте: «с легкостью реализовывать», а не зазубривать) необходимо каждому продвинутому разработчику.

12 algoritmov v programmirovanii 108739f - 12 алгоритмов в программировании

Быстрая сортировка. Источник: Wikipedia

12 algoritmov v programmirovanii d814dd5 - 12 алгоритмов в программировании

Сортировка слиянием. Источник: Wikipedia

Кодирование Хаффмена

Кодирование Хаффмена – это основа современного сжатия текстов. Суть его заключается в анализе частотности появления символов в тексте и построения на его основе дерева из этих символов.

Уделение времени разбору как работает кодирование Хаффмана – это хороший способ освоиться в работе с представлением данных и обходом деревьев, что является двумя наиболее важными проблемными вопросами, с которыми приходится сталкиваться специалистам по Computer Science.

12 algoritmov v programmirovanii 8a76ba6 - 12 алгоритмов в программировании

Кодирование Хаффмена. Источник: Wikipedia

Поиск в ширину

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

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

12 algoritmov v programmirovanii a9b3d45 - 12 алгоритмов в программировании

Поиск в ширину. Источник: Wikipedia

Поиск в глубину

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

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

12 algoritmov v programmirovanii 99de09c - 12 алгоритмов в программировании

Поиск в глубину. Источник: Wikipedia

Градиентный спуск

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

Градиентный спуск – это способ оптимизации функций, основанный на вычислениях. В контексте машинного обучения или регрессии это значит нахождение значений весов алгоритма ML, минимизирующих ошибку в предсказаниях. И хотя математически он более сложен, чем остальные алгоритмы, при работе с данными и предсказаниями понимание его работы имеет огромное значение.

12 algoritmov v programmirovanii 3b070ac - 12 алгоритмов в программировании

Градиентный спуск. Источник: Wikipedia

Алгоритм Дейкстры

Еще одна невероятно важная задача, с которой сталкиваются разработчики, это поиск путей. Графы невероятно эффективны для описания всех видов задач, включающих сеть связей отдельных объектов.

Алгоритм Дейкстры – это способ поиска кратчайшего пути между узлами в графе. Он является базой в задачах поиска пути и находит широкое применение начиная с искусственного интеллекта и заканчивая созданием игр.

12 algoritmov v programmirovanii 76e252a - 12 алгоритмов в программировании

Алгоритм Дейкстры. Источник: Wikipedia

Обмен ключами Диффи-Хеллмана

Обмен ключами Диффи-Хеллмана – это отличное введение в криптографию. Если конкретизировать, то он работает путем объединения открытых и закрытых ключей (которые представляют из себя очень длинные числа) для шифрования информации, передаваемой между двумя различными сторонами.

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

12 algoritmov v programmirovanii b458fd1 - 12 алгоритмов в программировании

Обмен ключами Диффи-Хеллмана. Источник: Gfycat

Решение практических задач

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

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

  • leetcode.com
  • projecteuler.net (Более математический)
  • hackerrank.com

На них вы найдете трудные, но решаемые алгоритмические задачи и отточите свои навыки.

Так каков итог?

Повторимся – не стоит просто зазубривать алгоритмы и думать, что это сделает тебя лучше как разработчика. Разработка ПО, прежде всего, заключается в умении понимать проблемы и создавать их решения. Изучение алгоритмов важно не потому, что вам придется в точности их имплементировать в своей работе. Оно важно, потому что учит вас находить подход к задаче.

***

Мне сложно разобраться самостоятельно, что делать?

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

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

Курс подходит как junior, так и middle-разработчикам.

Интересно, хочу попробовать

  • 0 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Связаться со мной
Close