Открыть сервисСервис

Алгоритм в информатике

Алгоритм — конечная последовательность точно определённых инструкций, выполняемых для решения определённой задачи или достижения заданной цели. Термин происходит от латинизированного написания имени персидского математика аль-Хорезми (Мухаммад ибн Муса аль-Хорезми, IX век), чьи труды по счислению были переведены на латынь в Средние века. В информатике алгоритм является фундаментальной абстракцией: программа представляет собой реализацию алгоритма на конкретном языке программирования, а сам алгоритм существует независимо от языка и аппаратуры.

Основные свойства

Классическое определение алгоритма включает пять ключевых свойств, сформулированных в трудах по теории вычислений:

  • Дискретность — алгоритм состоит из конечного числа отдельных шагов (действий), каждый из которых выполняется за конечное время.
  • Детерминированность — каждый шаг однозначно определяет следующий; для одного и того же набора исходных данных алгоритм выполняется одинаково.
  • Полнота — исходные данные и все действия описаны достаточно полно, чтобы результат был получен без обращения к внешним инструкциям.
  • Конечность — алгоритм завершается за конечное число шагов для любых допустимых входных данных.
  • Результативность — каждый шаг алгоритма применим к допустимым данным и приводит к поставленной цели.

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

Способы описания

Алгоритм может быть описан несколькими способами, различающимися по степени формализации:

Способ описанияХарактеристика
Естественный языкНеспециализированный текст, допускающий неоднозначность
ПсевдокодОбобщённая запись, близкая к программе, но не привязанная к языку
Блок-схемаГрафическое представление с использованием геометрических фигур
Формальная записьМатематическая нотация (лямбда-исчисление, машина Тьюринга)
ПрограммаРеализация на конкретном языке программирования

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

Классификация

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

По назначению различают алгоритмы сортировки (пузырьковая сортировка, быстрая сортировка, сортировка слиянием), поиска (линейный поиск, бинарный поиск), математические (нахождение НОД, возведение в степень), строковые, графовые (обход графа в ширину и в глубину, поиск кратчайшего пути) и многие другие.

Оценка эффективности

Качество алгоритма оценивается по времени выполнения и объёму используемой памяти. Для этого применяется асимптотическая нотация Большого O, введённая немецким математиком Паулем Бахманом в 1894 году и популяризированная Эдмундом Ландо. Нотация описывает, как растёт время выполнения или потребление памяти при увеличении объёма входных данных.

Типичные оценки сложности:

  • O(1) — конечное время, не зависящее от объёма данных (доступ по индексу в массиве).
  • O(log n) — логарифмическая сложность (бинарный поиск).
  • O(n) — линейная сложность (линейный поиск).
  • O(n log n) — линейно-логарифмическая (быстрая сортировка в среднем случае).
  • O(n²) — квадратичная (пузырьковая сортировка).
  • O(2ⁿ) — экспоненциальная (перебор всех подмножеств).

История

Понятие алгоритма как формальной процедуры существовало задолго до появления компьютеров. Египетские и вавилонские математики описывали вычислительные процедуры ещё в III тысячелетии до н. э. Труды аль-Хорезми «Об индийском счислении» и «Книга о восстановлении и противопоставлении» заложили основу алгебры как дисциплины.

В XIX веке немецкий математик и философ Готлоб Фреге ввёл понятие формального языка, а Дэвид Гильберт в 1900 году поставил проблему разрешимости — вопрос о существовании алгоритма, решающего любую поставленную задачу. В 1930-х годах Алан Тьюринг и Алонзо Черч независимо друг от друга дали строгое определение алгоритма: Тьюринг предложил абстрактную вычислительную машину (машина Тьюринга), а Черч — лямбда-исчисление. Тезис Черча — Тьюринга утверждает, что любая эффективно вычислимая функция может быть вычислена алгоритмом на машине Тьюринга.

В 1936 году Курт Гёдель, Алан Тьюринг и другие доказали неразрешимость проблемы остановки: не существует универсального алгоритма, определяющего, завершится ли произвольная программа за конечное время. Это открытие ограничило область применимости алгоритмов и заложило основы теории сложности вычислений.

Значение

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

История: Д. Кнут, «Искусство программирования»; Т. Кормен и др., «Алгоритмы: построение и анализ»; Г. С. Туманов, «Алгоритмы и их реализация»; В. А. Бурков, «Основы математической теории систем».

Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru