数据结构 2____概论

来源:互联网 发布:淘宝创想电玩黑店 编辑:程序博客网 时间:2024/05/17 02:41

研究数据结构的目的在于更好地进行程序设计.  程序设计离不开数据的运算, 这种运算的过程(或解题的方法) 通常称为算法.

算法是对问题求解步骤的一种描述.

严格地说, 定义: 算法是由若干条指令组成的胡穷序列, 其中每条指令表示一个或多个操作。


1. 算法的含义与程序十分相似, 但是有区别的, 程序必须依赖于计算机程序语言,而一个算法可用自然语言、计算机程序语言、数学语言或约定的符号语言来描述.


2. 怎么样评价算法的优劣, 进而从中选择好的算法呢?

    算法的正确性是首先要考虑的,此外,应考虑以下3点:

   (1)   执行算法所耗费的时间, 即时间的复杂性

   (2)   执行算法所耗费的存储空间,主要是辅助空间,即空间复杂性

   (3)   算法应易于理解, 易于编程, 易于调试等, 即可读性和可操性.


在以上3点中, 最主要的是时间复杂性. 一个算法 所耗费的时间应该是算法中每条语句的执行时间之和, 而每条语句的执行时间就是该语句的执行次数(也即频度)  也该语句执行一次所需时间的乘积.

  一般情况下,算法中基本操作重复执行的次数是问题规模n 的某个函数f(n) ,  算法的时间量度记为:  T(n) = O(f(n)).

 所谓问题规模, 指将算法所要  求解问题的输入量称为问题的规模, 用一个正整数n来表示。


3. 假如将算法中基本操作的重复执行次数看成是问题规模n 的某个函数f(n), 算法的渐近时间复杂度记作:  T(n)  = O (f(n)).  它表示随问题规模n的增大, 算法执行时间的增长率和 f(n)  的增长率相同,其中 f(n) 一般为算法中频度最大的语句频度.

(1)   在分析算法时,往往对算法的时间复杂度和渐近时间复杂度不予区分,而经常是将渐近时间复杂度 T(n) = O(f(n)), 简称为时间复杂度.

(2)   如果一个算法的执行时间是一个与问题规模n 无关的常数, 即使是一个较大的常数,仍为常数阶。 记作T(n) = O(1).

     例如:

     x = 90, y = 100;    while(y > 0) {        if(x>100) {            x = x-5; y--;         }else {           x++;       }   }

   (3)  算法的复杂度通常具有 O(1),   对数阶O(log2n),   线性阶 O(n),   线性对数阶 O(nlog2n),   O(),  o(),   指数阶 o(),  阶乘阶 o(n!

0 0
原创粉丝点击