Эта статья нуждается в дополнительных ссылках для проверки . ( март 2009 г. ) |
В информатике лучший , худший и средний случаи данного алгоритма выражают , каково использование ресурсов по крайней мере , не более и в среднем соответственно. Обычно рассматриваемым ресурсом является время выполнения, т . е. временная сложность , но также может быть память или другой ресурс. В лучшем случае это функция, которая выполняет минимальное количество шагов на входных данных из n элементов. В худшем случае это функция, которая выполняет максимальное количество шагов на входных данных размера n. Средний случай — это функция, которая выполняет среднее количество шагов для входных данных из n элементов.
В вычислениях в реальном времени время выполнения в наихудшем случае часто вызывает особую озабоченность, поскольку важно знать, сколько времени может потребоваться в наихудшем случае , чтобы гарантировать, что алгоритм всегда завершится вовремя.
Средняя производительность и производительность в наихудшем случае наиболее часто используются при анализе алгоритмов. Менее распространена производительность в наилучшем случае , но она имеет применение: например, когда известны лучшие случаи отдельных задач, их можно использовать для повышения точности общего анализа наихудшего случая. Ученые- компьютерщики используют методы вероятностного анализа , особенно математическое ожидание , для определения ожидаемого времени работы.
Термины используются в других контекстах; например, наихудший и наилучший исход эпидемии, наихудшая температура, которой подвергается элемент электронной схемы, и т. д. Если используются компоненты с заданным допуском , устройства должны быть рассчитаны на правильную работу в наихудшем сочетании. допусков и внешних условий.
Термин производительность в лучшем случае используется в информатике для описания поведения алгоритма в оптимальных условиях. Например, наилучший случай простого линейного поиска в списке возникает, когда искомый элемент является первым элементом списка.
Разработка и выбор алгоритмов редко основываются на производительности в наилучшем случае: большинство академических и коммерческих предприятий больше заинтересованы в улучшении сложности в среднем и производительности в наихудшем случае . Алгоритмы также могут быть тривиально модифицированы, чтобы иметь хорошее время работы в лучшем случае, путем жесткого кодирования решений для конечного набора входных данных, что делает измерение почти бессмысленным. [1]
Анализ производительности в наихудшем случае и анализ производительности в среднем имеют некоторое сходство, но на практике обычно требуют разных инструментов и подходов.
Определить, что означает типичный ввод , сложно, и часто этот средний ввод имеет свойства, которые затрудняют его математическую характеристику (рассмотрим, например, алгоритмы, разработанные для работы со строками текста). Точно так же, даже когда возможно разумное описание конкретного «среднего случая» (которое, вероятно, будет применимо только для некоторых применений алгоритма), они, как правило, приводят к более сложному анализу уравнений. [2]
Анализ наихудшего случая дает безопасный анализ (наихудший случай никогда не недооценивается), но он может быть чрезмерно пессимистичным , поскольку может не быть (реалистичных) входных данных, которые потребовали бы такого количества шагов.
В некоторых ситуациях может оказаться необходимым использовать пессимистический анализ, чтобы гарантировать безопасность. Однако часто пессимистический анализ может быть слишком пессимистичным, поэтому анализ, который приближается к реальному значению, но может быть оптимистичным (возможно, с некоторой известной низкой вероятностью неудачи), может оказаться гораздо более практичным подходом. Один из современных подходов в академической теории для преодоления разрыва между анализом наихудшего и среднего случаев называется сглаженным анализом .
При анализе алгоритмов, которые часто требуют небольшого времени для завершения, но периодически требуют гораздо большего времени, амортизированный анализ может использоваться для определения наихудшего времени выполнения (возможно, бесконечного) ряда операций . Эта амортизированная стоимость в худшем случае может быть намного ближе к средней стоимости, но при этом обеспечивает гарантированный верхний предел времени работы.
Анализ наихудшего случая связан со сложностью наихудшего случая . [3]
Многие алгоритмы с плохой производительностью в худшем случае имеют хорошую производительность в среднем. Для проблем, которые мы хотим решить, это хорошо: мы можем надеяться, что конкретные экземпляры, которые нас интересуют, являются средними. Для криптографии это очень плохо: мы хотим, чтобы типичные экземпляры криптографической проблемы были сложными. Здесь такие методы, как случайная саморедукция , могут использоваться для некоторых конкретных задач, чтобы показать, что наихудший случай не сложнее, чем средний случай, или, что то же самое, что средний случай не легче, чем наихудший случай.
С другой стороны, некоторые структуры данных, такие как хеш-таблицы , имеют очень плохое поведение в наихудшем случае, но хорошо написанная хэш-таблица достаточного размера статистически никогда не даст наихудшего случая; среднее количество выполненных операций соответствует экспоненциальной кривой затухания, поэтому время выполнения операции статистически ограничено.
Алгоритм | Структура данных | Временная сложность: Лучшая | Временная сложность:Средняя | Сложность по времени: Худшая | Космическая сложность: Худшая |
---|---|---|---|---|---|
Быстрая сортировка | Множество | О ( п журнал ( п )) | О ( п журнал ( п )) | О( п 2 ) | О( п ) |
Сортировка слиянием | Множество | О ( п журнал ( п )) | О ( п журнал ( п )) | О ( п журнал ( п )) | О( п ) |
Куча сортировки | Множество | О ( п журнал ( п )) | О ( п журнал ( п )) | О ( п журнал ( п )) | О(1) |
Гладкая сортировка | Множество | О( п ) | О ( п журнал ( п )) | О ( п журнал ( п )) | О(1) |
Пузырьковая сортировка | Множество | О( п ) | О( п 2 ) | О( п 2 ) | О(1) |
Сортировка вставками | Множество | О( п ) | О( п 2 ) | О( п 2 ) | О(1) |
Сортировка выбором | Множество | О( п 2 ) | О( п 2 ) | О( п 2 ) | О(1) |
сортировка бого | Множество | О( п ) | О( н н !) | О (∞) | О(1) |
Структура данных | Временная сложность | Сложность пространства | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
Среднее: индексация | Среднее: Поиск | Среднее: вставка | Среднее: удаление | Худшее: индексация | Худшее: Поиск | Худшее: вставка | Худшее: удаление | Худший | ||
Базовый массив | О(1) | О( п ) | О( п ) | О( п ) | О(1) | О( п ) | О( п ) | О( п ) | О( п ) | |
Динамический массив | О(1) | О( п ) | О( п ) | — | О(1) | О( п ) | О( п ) | — | О( п ) | |
Куча | О( п ) | О( п ) | О(1) | О(1) | О( п ) | О( п ) | О(1) | О(1) | О( п ) | |
Очередь | О( п ) | О( п ) | О(1) | О(1) | О( п ) | О( п ) | О(1) | О(1) | О( п ) | |
Односвязный список | О( п ) | О( п ) | О(1) | О(1) | О( п ) | О( п ) | О(1) | О(1) | О( п ) | |
Двусвязный список | О( п ) | О( п ) | О(1) | О(1) | О( п ) | О( п ) | О(1) | О(1) | О( п ) | |
Пропустить список | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | О( п ) | О( п ) | О( п ) | О( п ) | O ( n журнал ( n )) | |
Хеш-таблица | — | О(1) | О(1) | О(1) | — | О( п ) | О( п ) | О( п ) | О( п ) | |
Бинарное дерево поиска | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | О( п ) | О( п ) | О( п ) | О( п ) | О( п ) | |
Декартово дерево | — | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | — | О( п ) | О( п ) | О( п ) | О( п ) | |
B-дерево | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | О( п ) | |
Красно-черное дерево | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | О( п ) | |
Растянутое дерево | — | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | — | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | О( п ) | |
АВЛ-дерево | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | О( п ) | |
Кд дерево | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | О (журнал ( п )) | О( п ) | О( п ) | О( п ) | О( п ) | О( п ) |