[英]Big-O time complexity
我一直在做Big-O的自学。 我理解如何给算法提供以下符号的示例:
上):
for(int i = 0; i < n; i++)
sum++;
O(N ^ 2):
for(int i = 0; i < n; i++)
for( int j = 0; j < n; j++)
sum++;
O(N ^ 3):
for(int i = 0; i < n; i++)
for( int j = 0; j < n * n; j++)
sum++;
我遇到过这些我不太了解的符号。 如何根据算法提供这些示例?
也许我应该这样说:写一个算法,运行时间与以下成比例:
我担心你误解了“Big-O”符号。
符号不是作为算法“表达”的。 相反,Big-O表示法描述了算法的属性。
所以它不是“O(N)可以表示为XXX”,而是“算法XXX具有O(N)的复杂度”。
也就是说,要求具有一定复杂度的算法示例是非常合理的; 你已经列出了一些。 解决您的问题:
O(4 ^ n)与O(e ^ n)相同,通常写为O(exp(n))(试着理解为什么它是相同的)。
O(4 ^ n)属于具有“指数复杂度”( EXPTIME )的算法类。 数学/ CS中的许多重要问题具有指数复杂性(或几乎指数复杂性)。
具有指数复杂度的算法将是例如离散对数问题的简单解决方案。
对于其他复杂性我不能举一个例子,但你可能会通过谷歌搜索找到一个。
你给出的算法严格来说不是Big-O而是Theta。 Big-O是一个渐近上界,意味着在某些更糟糕的情况下输入运行时间将是给定的但不适用于所有输入,其中Theta是一个紧密限制意味着运行时间总是那样。 例如,考虑给出已经排序的列表作为输入的排序算法,或者搜索算法,其中要找到的东西是列表中的第一个元素(在这种情况下,binarysearch与线性搜索相比如何)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.