我读到了算法的时间复杂性,我不知道我是否理解......以下所有示例都是用C ++创建的。如果我错了,请告诉我:
O(1)
:
int k;
k = 0;
O(n)
:
for(int i=0; i<n; i++) {
k[i] = i%10;
}
O(n^2)
:
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
k[j] = i%10;
}
}
O(n^k)
(k是一个已知数字 - 语句有k
):
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
.......
for(int f=0; f<n; f++) {
k[j][f] = p%10;
}
.......
}
}
什么是O(k^n)
?什么是O(log n)
和O(n * log n)
?请给我一个算法(代码)示例。
上面的例子我错了吗?
答案 0 :(得分:1)
互联网上有很多解释,谷歌为#O;大O符号&#34;。您可以在https://rob-bell.net/2009/06/a-beginners-guide-to-big-o-notation/
找到一个简单的介绍示例:
O(k ^ n):生成n个字符的所有单词
O(log n):通过重复减半来搜索n个元素的排序列表
O(n log n):使用例如对列表进行排序Quicksort算法
空间复杂性与时间复杂性无关。搜索列表不会花费太多空间,但确实需要花费时间。你可以使用&#34; Big O&#34;任何函数的表示法,因此消耗时间作为n的函数,或消耗的空间作为n的函数。
你的所有例子都是正确的。
答案 1 :(得分:1)
1。 O(k ^ n):列出所有二进制字符串长度n(O(2 ^ n))
O(logn):二进制搜索是最简单的例子
O(nlogn):排序算法,例如quicksort,heapsort ....
你是对的
不,空间复杂度与时间复杂度不同 示例:如果将数据存储到二维数组中,则它们具有O(n ^ 2)空间复杂度,但您只需要一个用于循环遍历n个元素,那么您的算法具有O(n)时间复杂度。 注意:在我的例子中使用O(n ^ 2)和O(n)并不完全正确,我们最好使用theta(n ^ 2)和theta(n)
希望它有所帮助。