什么购物网站是正品而且便宜,网站的空间租用费,中英文网站建设企业,微信商城网站方案转:https://blog.csdn.net/mr_garfield__/article/details/78762478
时间复杂度#xff1a; 一般情况下#xff0c;算法中基本操作重复的次数就是问题规模n的某个函数f#xff08;n#xff09;#xff0c;进而分析f#xff08;n#xff09;随n的变化情况并确定T#…转:https://blog.csdn.net/mr_garfield__/article/details/78762478
时间复杂度 一般情况下算法中基本操作重复的次数就是问题规模n的某个函数fn进而分析fn随n的变化情况并确定Tn的数量级。这里用‘o’来表示数量级给出算法时间复杂度。 Tnofn 它表示随问题规模n的增大算法的执行时间增长率和fn增长率成正比这称作算法的渐进时间复杂度。而我们一般情况下讨论的最坏的时间复杂度。 空间复杂度 算法的空间复杂度并不是实际占用的空间而是计算整个算法空间辅助空间单元的个数与问题的规模没有关系。算法的空间复杂度Sn定义为该算法所耗费空间的数量级。 Snofn 若算法执行所需要的辅助空间相对于输入数据n而言是一个常数则称这个算法空间复杂度辅助空间为o1 递归算法空间复杂度递归深度n*每次递归所要的辅助空间如果每次递归所需要的辅助空间为常数则递归空间复杂度on。
int binary_search(int *a,int size,int value) //[left,right);
{int left 0;int right size;while (left right){int mid left ((right - left) 1);if (value a[mid])left mid 1;else if (value a[mid])right mid ;elsereturn mid;}return -1;
}
int binary_search1(int *a, int size, int value)//[left,right]
{int left 0;int right size - 1;while (left right){int mid left ((right - left) 1);if (value a[mid])left mid 1;else if (value a[mid])right mid - 1;elsereturn mid;}return -1;
}折半查找时间复杂度 假设在n个数中查找查找第一次个数变为n/2查找第二次 个数变为 n/2/2 依次类推计算第n次时查找的数列长度为n/(2^x)。设x为查找的次数最坏情况下查找x次找到 n/(2^x)1 所以查找在n个数查找查找的次数为xlog n 时间复杂度为Olog n(以2为底n的对数) 空间复杂度O1
//递归实现二分查找
int binary_search2(int *a, int left,int right, int value)
{if (left right){int mid left ((right - left) 1);if (value a[mid]){return mid;}else if (value a[mid]){left mid 1;return binary_search2(a, left, right, value);}else{right mid - 1;return binary_search2(a, left, right, value);}}elsereturn -1;
}int fibonacci(int a)
{if (a 2)return a;elsereturn fibonacci(a - 1) fibonacci(a - 2);
}斐波那契的递归时间复杂度分析 如图为递归的次数。2^5-16以此类推计算第n个斐波那契数是时间复杂度为O2^n-O(1) 即时间复杂度为 O2^n 空间复杂度递归深度*每次递归所需要的辅助空间所以空间复杂度有为on
//斐波那契数的非递归算法
int fibonacci1(int a)
{int x0, y1, z;if (a 2) return a;else{int i 0;for (i 2; i a; i) { z x y; x y;y z;}}return z;
}
时间复杂度On 空间复杂度On