Перейти к содержанию

1.2   Что такое алгоритм

1.2.1   Определение алгоритма

Алгоритм (algorithm) - это набор инструкций или шагов, который решает конкретную задачу за конечное время. Он обладает следующими свойствами.

  • Задача четко определена и имеет ясные определения входных и выходных данных.
  • Алгоритм осуществим и может быть выполнен за конечное число шагов, времени и памяти.
  • Каждый шаг имеет однозначный смысл, и при одинаковых входных данных и условиях выполнения результат всегда будет одинаковым.

1.2.2   Определение структуры данных

Структура данных (data structure) - это способ организации и хранения данных, охватывающий само содержимое данных, связи между данными и методы работы с ними. У нее есть следующие цели проектирования.

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

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

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

1.2.3   Связь между структурами данных и алгоритмами

Как показано на рисунке 1-4, структуры данных и алгоритмы тесно связаны и сильно зависят друг от друга; это проявляется в следующих трех аспектах.

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

Связь между структурами данных и алгоритмами

Рисунок 1-4   Связь между структурами данных и алгоритмами

Структуры данных и алгоритмы похожи на сборку конструктора, показанную на рисунке 1-5. В набор конструктора, помимо множества деталей, входит и подробная инструкция по сборке. Если шаг за шагом следовать этой инструкции, можно собрать красивую модель.

Сборка конструктора

Рисунок 1-5   Сборка конструктора

Подробное соответствие между ними показано в таблице 1-1.

Таблица 1-1   Сравнение структур данных и алгоритмов со сборкой конструктора

Структуры данных и алгоритмы Сборка конструктора
Входные данные Несобранные детали конструктора
Структура данных Организация деталей: форма, размер, способ соединения и т. д.
Алгоритм Последовательность шагов по сборке деталей в целевую форму
Выходные данные Собранная модель конструктора

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

Принятое сокращение

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

Оставляйте свои идеи, вопросы и предложения в комментариях