# Что такое алгоритм ## Определение алгоритма Алгоритм (algorithm) - это набор инструкций или шагов, который решает конкретную задачу за конечное время. Он обладает следующими свойствами. - Задача четко определена и имеет ясные определения входных и выходных данных. - Алгоритм осуществим и может быть выполнен за конечное число шагов, времени и памяти. - Каждый шаг имеет однозначный смысл, и при одинаковых входных данных и условиях выполнения результат всегда будет одинаковым. ## Определение структуры данных Структура данных (data structure) - это способ организации и хранения данных, охватывающий само содержимое данных, связи между данными и методы работы с ними. У нее есть следующие цели проектирования. - Занимать как можно меньше места, чтобы экономить память компьютера. - Выполнять операции над данными как можно быстрее, включая доступ, добавление, удаление, обновление и т. д. - Предоставлять компактное представление данных и логическую информацию, чтобы алгоритмы могли работать эффективно. **Проектирование структур данных - это процесс, полный компромиссов**. Если мы хотим улучшить что-то одно, то часто вынуждены уступить в чем-то другом. Ниже приведены два примера. - По сравнению с массивами связные списки удобнее для добавления и удаления данных, но жертвуют скоростью доступа к ним. - По сравнению со связными списками графы предоставляют более богатую логическую информацию, но требуют большего объема памяти. ## Связь между структурами данных и алгоритмами Как показано на рисунке ниже, структуры данных и алгоритмы тесно связаны и сильно зависят друг от друга; это проявляется в следующих трех аспектах. - Структуры данных служат фундаментом алгоритмов. Они дают алгоритмам структурированный способ хранения данных и методы работы с ними. - Алгоритмы оживляют структуры данных. Сами по себе структуры данных лишь хранят информацию, а в сочетании с алгоритмами позволяют решать конкретные задачи. - Алгоритмы обычно можно реализовать на основе разных структур данных, но эффективность выполнения может сильно различаться, поэтому выбор подходящей структуры данных является ключевым.  Структуры данных и алгоритмы похожи на сборку конструктора, показанную на рисунке ниже. В набор конструктора, помимо множества деталей, входит и подробная инструкция по сборке. Если шаг за шагом следовать этой инструкции, можно собрать красивую модель.  Подробное соответствие между ними показано в таблице ниже.
Таблица