我对大O符号的某些方面有点困惑。我为这个错综复杂的例子提前道歉
如果是函数ex。 O(2^N) + O(N^7)
; N输入值被认为是相同的,O(N^7)
将支配O(2^N)
,或者大O值可以减少到O(N^7)
。 O(2^N) * O(N^7)
也是如此; O(N^7)
将占主导地位,因为N(或输入)的值被认为是相同的,并且运行时O(N^7)
比O(2^N)
更差。函数需要具有两个输入值,这两个输入值可以缩放以便将函数表示为O(2^N) + O(M^7)
,并且输入O(2 ^ N)的运行时将支配O(M ^ 7)。那是对的吗?
这里也是我混淆的地方。现在,如果我们比较两个函数,一个带有运行时O(N^7)
的函数和一个带有运行时O(2^N)
的函数。 N或输入被认为是相同的,并且函数2^N
运行时会比N^7
更差?除非明确说明它们与我们不同,否则我们应该假设N是相同的。换句话说,Big O正在比较两个(为简单起见我使用两个)输入(N)的缩放值,并且N
必须被认为是相同的以进行比较。我理解正确吗?
任何帮助都将受到赞赏或链接到重复的帖子,因为我确信此问题之前已被问过。我只是在堆栈溢出时找不到它。
答案 0 :(得分:0)
“
O(2^N) + O(N^7)
...O(N^7)
将支配O(2^N)
”
没有。指数增长远远快于任何多项式。
“对
也是如此O(2^N) * O(N^7)
”
没有。您不能忽略非常量乘法因子。它将增长为O(N^7 * 2^N)
。
“......运行时
更差O(N^7)
比O(2^N)
”
再次,不。
“两个输入值......
O(2^N) + O(M^7)
...O(2^N)
将支配O(M^7)
”
这是正确的,但前提是M
不是N
的指数。
总之,我建议阅读big-O。你似乎没有掌握渐近增长的概念。