верхняя граница, нижняя граница - PullRequest
26 голосов
/ 30 ноября 2009

Что значит доказать верхнюю или нижнюю границу алгоритма?

Ответы [ 3 ]

49 голосов
/ 30 ноября 2009

Подтверждение верхней границы означает, что вы доказали, что алгоритм будет использовать не более чем некоторый лимит ресурса.

Подтверждение нижней границы означает, что вы доказали, что алгоритм будет использовать не менее чем некоторое ограничение на ресурс.

«Ресурсом» в этом контексте может быть время, память, пропускная способность или что-то еще.

5 голосов
/ 30 ноября 2009

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

Возьмите, к примеру, нашего старого друга, пузырьковую сортировку. В идеальном случае, когда все данные уже отсортированы, требуется время f (n), функция зависит от n, количества элементов в списке. Это потому, что вам нужно сделать только один проход набора данных (с нулевыми перестановками), чтобы убедиться, что ваш список отсортирован.

В особенно плохом случае, когда данные сортируются в порядке, обратном желаемому, требуемое время становится f (n 2 ). Это потому, что каждый проход перемещает один элемент в нужную позицию, и вам нужно n проходов, чтобы выполнить все элементы.

В этом случае верхняя и нижняя границы различаются, хотя сложность big-O остается прежней.

Кроме того, пузырьковая сортировка сильно порочна (обычно по уважительным причинам), но может иметь смысл в определенных обстоятельствах. Я на самом деле использую его в приложении, где большая часть данных уже отсортирована и только один или два элемента, как правило, добавляются за один раз в конец списка. Для добавления одного элемента и с пузырьковой сортировкой в ​​обратном направлении вы можете гарантировать, что новый список будет отсортирован за один проход. Это иллюстрирует концепцию нижней границы.

Фактически, вы могли бы сделать оптимизацию пузырьковой сортировки, которая устанавливает нижнюю границу для f (1), просто предоставив дополнительную информацию, которая указывает, отсортирован ли список. Вы установите это после сортировки и очистите при добавлении элемента в конец.

2 голосов
/ 24 мая 2012

Какой бы ни была граница (верхняя или нижняя), мы всегда говорим о входных данных наихудшего случая, которые мы можем рассмотреть. Например, при сортировке мы предполагаем, что наихудшим случаем является несортированный список ввода.

Насколько я понимаю, проблемы имеют нижнюю границу. Например, мы говорим, что нижняя граница сортировки на основе сравнения - \ Omega (n log n); мы не делаем никаких предположений о том, какой конкретный алгоритм сортировки на основе сравнения мы используем. Каким бы ни был алгоритм (сортировка слиянием, быстрая сортировка и т. Д.), Мы не можем добиться большего, чем эта граница \ Omega (n log n). Нижние границы интуитивно говорят нам, насколько сложна конкретная проблема .

Когда мы говорим о конкретном алгоритме , тогда мы говорим о верхних границах. Например, мы говорим, что верхняя граница сортировки пузырьков O (n ^ 2), а верхняя граница сортировки слиянием O (n log n). Верхние границы, интуитивно, говорят нам, насколько хорош конкретный алгоритм для решения проблемы.

...