C 我对n*log(n)Big O的样子很感兴趣
我知道简单的线性大O看起来像这样(都是C):C 我对n*log(n)Big O的样子很感兴趣,c,time-complexity,big-o,C,Time Complexity,Big O,我知道简单的线性大O看起来像这样(都是C): #包括 int main() { int数组[10]={1,2,3,4,5,6,7,8,9,10};//数组的元素 int a;//创建新变量 对于(a=0;a如果它的对数基数为2,则重复将n除以一半,直到它达到1,这是获取对数(n)复杂性的最典型方法: for (int i = n; i > 0; i /= 2); 所以O(n log(n))看起来像: for (int i = 0; i < n; i++) { for (int
#包括
int main()
{
int数组[10]={1,2,3,4,5,6,7,8,9,10};//数组的元素
int a;//创建新变量
对于(a=0;a如果它的对数基数为2,则重复将n
除以一半,直到它达到1,这是获取对数(n)复杂性的最典型方法:
for (int i = n; i > 0; i /= 2);
所以O(n log(n))看起来像:
for (int i = 0; i < n; i++) {
for (int j = n; j > 0; j /= 2) {
// O(1) work
}
}
for(int i=0;i0;j/=2){
//O(1)工作
}
}
从概念上讲,这类似于对数组(O(n))的每个元素运行二进制搜索(O(log(n))
是a——日志(n)部分将数组拆分为块,而O(n)部分将这些块重新合并在一起。对于每个O(日志(n))拆分操作,一个O(n)合并的发生使得复杂度在嵌套循环中相乘。通过考虑分治来添加“对数n”因子。其中一些算法设计得最好,并且经常使用
合并排序
堆排序
快速排序
基于优化O(n^2)算法的若干分治算法
看一个算法。谢谢你的帮助:)谢谢你的答案:)
for (int i = n; i > 0; i /= 2);
for (int i = 0; i < n; i++) {
for (int j = n; j > 0; j /= 2) {
// O(1) work
}
}