请明白人教下,算法时间复杂度分析.

来源:百度知道 编辑:UC知道 时间:2024/05/02 18:39:15
本人自学编程
已经看完汇编和C,基本有印象。打算学数据结构了。
初学数据结构与算法
看了半天这时间复杂度算法就是不会。
分析以下程序段的时间复杂度.
i=1; (1)
while(i<=n)
i=2*n; (2)
解:语句(1)的执行次数是1.设语句(2)的执行次数为f(n),则2^f(n)<=n.
得T(n)=O(log(2)(n))

2^f(n)<=n到T(n)=O(log(2)(n))我倒理解.
“设语句(2)的执行次数为f(n),”这是什么意思啊。
然后则2^f(n)<=n.到这步又怎么来。
后面的递归调用,那时间复杂度怎么算出来更看不明白。
谁能提供帮助给我呀,有热心人,不要学费的(呵呵)
加个Q能在我自学路上,能提供帮助给我,那最好了。``~~~~~

“设语句(2)的执行次数为f(n),” 这句话仅仅是设置了一个未知量f(n)来表示语句(2)的执行次数,这里完全可以设置其他的未知量,如x, y等来表示语句(2) 的执行次数。 那么我们可以知道, 语句2 中的循环体每执行一次, i的值就会扩大2倍, 那么执行 k(k代表某常数) 次以后 i 的值 为 i*(2^k), 注意这里的 2^k 的含义是2 的 k次方, 而不是 2 xor k, 那么, 由于i的初始值为1, 我们可以知道在语句2执行k次以后, i 的 值即为2^k。 而由循环体中的布尔表达式可知, i 的值必然小于等于n, 那么可以知道 2^k <= n, 即 k <= log(2)(n), 即语句2的执行次数为O(log(2)(n))。

算法(Algorithm)是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。
一个算法应该具有以下五个重要的特征:
1、有穷性: 一个算法必须保证执行有限步之后结束;
2、确切性: 算法的每一步骤必须有确切的定义;
3、输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件;
4、输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;
5、可行性: 算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。
计算机科学家尼克劳斯-沃思曾著过一本著名的书《数据结构十算法= 程序》,可见算法在计算机科学界与计算机应用界的地位。
同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。
时间