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

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 на деле одновременно проверяют знания и по структурам данных, и по алгоритмам.

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