Algorithm 大(O)符号-哪一个是正确的
我正在努力学习BigO符号。在网上搜索一些文章时,我发现了两篇不同的文章 严格地说,就循环而言,它们似乎具有几乎相同的流。 比如说 [A] 的代码如下所示,它是在JS中完成的Algorithm 大(O)符号-哪一个是正确的,algorithm,sorting,big-o,Algorithm,Sorting,Big O,我正在努力学习BigO符号。在网上搜索一些文章时,我发现了两篇不同的文章 严格地说,就循环而言,它们似乎具有几乎相同的流。 比如说 [A] 的代码如下所示,它是在JS中完成的 function allPairs(arr) { var pairs = []; for (var i = 0; i < arr.length; i++) { for (var j = i + 1; j < arr.length; j++) { pairs
function allPairs(arr) {
var pairs = [];
for (var i = 0; i < arr.length; i++) {
for (var j = i + 1; j < arr.length; j++) {
pairs.push([arr[i], arr[j]]);
}
}
return pairs;
}
[B] 的代码如下所示,它是用C完成的-整个代码是
站点A上的文章提到时间复杂性为^2,而站点B上的文章提到其O1/2·n2
哪一个是对的
谢谢假设O1/2·n2意味着O1/2·n^2,两个时间复杂度相等。请记住,BigO表示法并不关心常数,因此两种算法都在^2上。假设O1/2·n2表示O1/2·n^2,则两种时间复杂度相等。请记住,BigO表示法并不关心常量,因此这两种算法都在^2上。您没有仔细阅读。文章B说该算法执行了大约N²/2次比较,并继续解释这是开着的。您没有仔细阅读。文章B说该算法执行了大约N²/2比较,并继续解释这是开的。是什么使示例B O1/2 N^2?有两个嵌套循环,这足以说明它是开的^2。我不在乎1/2常量的含义,因为正如我之前所说,常量对于大O表示法并不重要。是什么使示例B O1/2 n^2?有两个嵌套循环,这足以说明它在^2上。我不在乎1/2常量的含义,因为正如我之前所说的,常量对于Big-O表示法并不重要。
for(int i = 0; i < n-1 ; i++) {
char min = A[i]; // minimal element seen so far
int min_pos = i; // memorize its position
// search for min starting from position i+1
for(int j = i + 1; j < n; j++)
if(A[j] < min) {
min = A[j];
min_pos = j;
}
// swap elements at positions i and min_pos
A[min_pos] = A[i];
A[i] = min;
}