1.二分法理论上很有用,但实践上不太行
因为
(1).排序
(2).插入和删除才是最麻烦的点
2.例题:
long long Func(size_t N)
{
if (0 == N)
return 1;
return Func(N - 1) * N;
}
每次函数的调用都是O(1)
一共调用了N+1次
所以时间复杂度是O(N)
3.例题:
long long Func(size_t N)
{
if (0 == N)
return 1;
for (int i = 0; i < N; ++i)
{
//........
}
return Func(N - 1) * N;
}
时间复杂度是O(N ^ 2)
4.斐波那契递归Fib的时间复杂度是O(2 ^ N)
5.空间复杂度:
空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用存储空间大小的量度。
空间复杂度不是程序占用了多少bytes的空间,因为这个也没意义,空间复杂度算的是变量的个数.
数组所占用的空间复杂度也是表述的是变量的个数(可能是常数个,也可能是N个)
空间复杂度计算也使用大O渐进表示法.
注:空间复杂度算的是额外的空间消耗(即因为算法的需要而开辟额外的空间)
6.冒泡排序的空间复杂度是O(1)
7.单链表里边的单个元素只有一个next