У меня проблема с домашней работой для класса моих алгоритмов, предлагающая рассчитать максимальный размер проблемы, который может быть разрешен в заданном числе операций с использованием алгоритма O (n log n) т.е.: n log n = c). Я смог получить ответ, приблизившись, но есть ли чистый способ получить точный ответ?Как вычислить n log n = c
ответ
Для этого уравнения нет формулы закрытой формы. В принципе, можно трансформировать уравнение:
n log n = c
log(n^n) = c
n^n = exp(c)
Тогда это уравнение имеет решение вида:
n = exp(W(c))
, где W является Lambert W function (см особенно "Пример 2"). Было доказано, что W
не может быть выражен с помощью элементарных операций.
Однако f(n)=n*log(n)
является монотонной функцией. Вы можете просто использовать биективности (здесь питон):
import math
def nlogn(c):
lower = 0.0
upper = 10e10
while True:
middle = (lower+upper)/2
if lower == middle or middle == upper:
return middle
if middle*math.log(middle, 2) > c:
upper = middle
else:
lower = middle
обозначение O только дает вам самый большой член в уравнении. То есть производительность вашего алгоритма O (n log n) может быть лучше представлена c = (n log n) + n + 53.
Это означает, что, не зная точной природы производительности вашего алгоритма, вы бы Невозможно вычислить точное количество операций, необходимых для обработки заданного объема данных.
Но можно вычислить, что максимальное количество операций, необходимых для обработки набора данных размера n, больше определенного числа или, наоборот, самый большой набор проблем, который можно решить, используя этот алгоритм и это число операций, меньше определенного числа.
Обозначение вывода полезно для сравнения 2 алгоритма, т.е. алгоритма уплотнительное (п^2) происходит быстрее, чем O (N^3) Алгоритм т.д.
см Wikipedia для получения дополнительной информации.
Да, вычисление корней «n Log [n] == c» не эквивалентно «вычислению максимального размера проблемы ...» –
Ваши объяснения верны, но для этой конкретной задачи нам разрешено предположить, что алгоритм точно равен n log n. Вероятно, я должен был сказать это в проблеме. – jlewis42
- 1. (log (n))^log (n) и n/log (n), что быстрее?
- 2. Каков порядок (log n)/(log (log n))?
- 3. Как O (n log n) отличается от O (log n)?
- 4. Почему этот цикл возвращает значение O (n log log n), а не O (n log n)?
- 5. Является ли log (n^c) равным O (log (n))
- 6. Сложность алгоритма, log^k n vs n log n
- 7. Является ли log (n!) = Θ (n · log (n))?
- 8. n^2 log n сложность
- 9. Самый близкий парный алгоритм из (n log^2 n) в (n log n) time
- 10. Является ли O (n) + O (n log n) равным O (n log n)?
- 11. Как рассчитать mod log (n) для больших значений n
- 12. Каким будет журнал (O (n * log (n)))?
- 13. O (N log N) Сложность - аналогично линейному?
- 14. Когда c> 0 Log (n) = O (n)? Не знаю, почему это не O (log n)
- 15. Вычисление ноты Not-O, O (n) * O (log n) = O (n log n)
- 16. Отношение повторения: T (n/16) + n log n
- 17. Если f (n) = O (g (n)), то log (f (n)) = O (log (g (n))?
- 18. Является большим o для следующего O (n^2 * log (n)) или O (n^3 * log (n))
- 19. Функции Big-Theta для времени работы в log (n!) И log (n) + log (n^2)
- 20. f (n)/log (n) = O (g (n)) ⇒ g (n) = Θ (f (n))?
- 21. O (log (n)) по сравнению с O (log (n)^p)
- 22. Является ли log (n!) = O ((log (n))^2)?
- 23. Почему сортировка строки O (n log n)?
- 24. Big O N^2 (Log N)
- 25. O (n log n) Алгоритм сложности времени?
- 26. O (log log n) алгоритм для пола (√2 n)?
- 27. стабильная сортировка в O (n log (log n))
- 28. O (N * log (log (N))) алгоритм для пиков Кодильности?
- 29. Big Oh Notation O ((log n)^k) = O (log n)?
- 30. n log n и скорость компьютера
c/ProductLog [c]? –