Временная сложность 2 ^ sqrt (n)

11

Я решаю вопрос об алгоритме, и мой анализ состоит в том, что он будет работать на O (2 ^ sqrt (n)). Насколько большой это? Это соответствует O (2 ^ n)? Это все еще неполиномиальное время?

Гаара
источник
3
Пожалуйста, прокомментируйте причину отклонения вопроса. Благодаря!
Гаара
4
Честно говоря, я подозреваю, что люди ошибочно принимают это за чрезвычайно тривиальный вопрос, но для меня не сразу очевидно, как это доказать в любом случае, поэтому я пойду напишу ответ и посмотрю, не изменит ли это мнение людей.
Ixrec
3
Субэкспоненциальное время, второе определение, согласно статье в Википедии (Отказ от ответственности: я не понизил голос; и я не знаю достаточно по этой теме, чтобы сказать, правильно ли это.)
rwong
1
Большой! Субэкспоненциальное время: «время выполнения некоторого алгоритма может расти быстрее, чем любой многочлен, но все же значительно меньше экспоненциального». Это определенно отвечает на мой вопрос и расширяет мои знания по анализу Big O. Большое спасибо
Гаара
1
Это намного меньше, чем O (2 ^ n), особенно для больших чисел. Возьмите пример наличия коллекции из 10 000 элементов. 2 ^ 10000 - это число с 3000 цифрами, то есть сколько циклов потребуется для выполнения операции O (2 ^ n) над ним. С O (2 ^ sqrt (n)) вы получаете номер с 30 цифрами. Разница чрезвычайно велика для больших чисел в пользу решения sqrt (для 1 миллиона элементов это (число с 300 000 цифр) * цикл процессора против (число с 300 цифрами) * цикл процессора).
Энди

Ответы:

16

Это интересный вопрос. К счастью, если вы знаете, как решить эту проблему, это не особенно сложно.

Для функций F : NR + и г : NR + , мы имеем фO ( г ) тогда и только тогда , когда Нт вир п → ∞ ф ( п ) / г ( п ) ∈ R .

Функция f : NR + имеет не более чем полиномиальный рост тогда и только тогда, когда существует постоянная kN такая, что fO ( nn k ). Давайте работать это для произвольного , но фиксированного кN .

Пт вир п → ∞ 2 ( п 1/2 ) / п K =
Нт п → ∞ 2 ( п 1/2 ) / п K =
Нт п → ∞ е лог (2) п 1/2 / е лог ( п ) k =
lim n → ∞ e log (2) n 1/2 - log ( n ) k = ∞ ∉ R

Первое равенство верно, потому что и знаменатель, и знаменатель являются монотонно растущими устойчивыми функциями. Второе равенство использует тождество x y = e log ( x ) y . Предел не является конечным, поскольку показатель степени в конечном выражении не ограничен выше. Не давая формальное доказательство, то можно предположить , что будет известно , что п 1/2 доминирует журнал ( п ) асимптотически. Следовательно, рассматриваемая функция превышает полиномиальный рост.

Однако его рост строго меньше экспоненциального, где экспонента определяется (для меня, для этой цели) как O ( n ↦ 2 c n ) при c > 0. Показывать это еще проще.

lim sup n → ∞ 2 c n / 2 ( n 1/2 ) = lim n → ∞ 2 c n - n 1/2 = ∞ ∉ R

для любого фиксированного c > 0. Следовательно, сложность функции где-то действительно находится между полиномом и экспонентой.

5gon12eder
источник
6

Насколько большой это? Что ж, O (2 ^ sqrt (n)) точно такой же большой, как и он :-(

Чтобы понять, что это значит, представьте, что ваш алгоритм будет не просто O (2 ^ sqrt (n)), но что на самом деле он занимает ровно 2 ^ sqrt (n) наносекунды на вашем компьютере:

n = 100: 2 ^ 10 = 1024 наносекунд. Нет времени вообще. n = 1000: 2 ^ 31.xxx = 2 миллиарда наносекунд. Две секунды, это заметно. n = 10000: 2 ^ 100 ≈ 10 ^ 30 наносекунд = 10 ^ 21 секунд = 30 триллионов лет.

Это намного лучше, чем 2 ^ n наносекунд, где n = 100 займет 30 триллионов лет, но все же размер проблем, которые вы можете решить, весьма ограничен. Если вы считаете проблему «разрешимой», если ваш компьютер может решить ее за одну неделю, это примерно 6 x 10 ^ 14 наносекунд, то есть n = 2400. С другой стороны, до n = 400 можно решить за миллисекунду.

(На практике для n = 10000 O (2 ^ sqrt (n)) и O (2 ^ n) занимают одно и то же время: слишком долго ждать.)

Он превосходит любой многочлен. Возьмите другой алгоритм, занимающий n ^ 1000 секунд. Что практически неразрешимо при n = 2. Этот алгоритм занимает больше времени, пока n не составит около 885 миллионов. Но действительно, кого это волнует? В этот момент количество лет, которое требуется обоим алгоритмам, составляет 9 000 цифр.

gnasher729
источник