Позволяет немного алгебры ....
N! = N x (N - 1) x (N - 2) x ... 1 // by definition
N! x N = N x (N x (N - 1) x (N - 2) x ... 1)
= (N + 1 - 1) x (N x (N - 1) x (N - 2) x ... 1)
= ((N + 1) x N x (N - 1) x (N - 2) x ... 1)
- (N x (N - 1) x (N - 2) x ... 1)
= (N + 1)! - N!
Теперь, "интуитивно очевидно" 1 , что O((N + 1)! - N!)
- это то же самое, что и O((N+1)!)
... и это можно доказать из первых принципов.
Кроме того, «интуитивно очевидно», что O(N!N)
в N раз дороже, чем O(N!)
, что переводит его в другой класс сложности. (Также как O(N)
и O(N^2)
- это разные классы сложности!)
Но вот в чем дело. Класс сложности O(N!)
явно проблематичен для практических вычислений, так как N
становится большим. Это существенно хуже, чем простая экспонента.
N! ~= N^N for large N // by Stirling's Approximation
N^N = e^(NlogN)
e^(NlogN) >> e^N for large N
Так что, в основном, если у вас O(N!)
или O(N!N)
, у вас большая проблема ... в любом случае.
1 - Утверждения типа «интуитивно очевидный» не являются правильной математикой. Очевидно.