《大话数据结构》学习笔记--chapter 2

来源:互联网 发布:mariadb和mysql哪个好 编辑:程序博客网 时间:2024/05/16 01:30

Chap 2     算法

 

2.4 算法的定义:

算法是解决特定问题求解的步骤描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作;

 

2.5 算法的特性:

l  输入输出:具有零个或多个输入,至少有一个或多个输出;

l  有穷性:执行有限的步骤后,自动结束,不会出现无限循环,每一个步骤都可以在可接受的时间内完成;

l  确定性:算法的每一个步骤都有确定的含义,不会出现二义性;

l  可行性:每一步骤都是可行的,能通过执行有限次数完成;

 

2.6 算法的设计要求:

l  正确性:

l  可读性:

l  健壮性:输入不合理时,算法也能做出相关处理,不会产生异常结果;

l  时间效率高,储存量低:

 

2.7 算法效率的度量方法:

l  事后统计方法:(不考虑)

l  事前分析估算方法:

**一个高级程序语言编写的程序在计算机中运行所消耗的时间取决于:

1.      算法采用的策略,方法;

2.      编译产生的代码质量;

3.      问题的输入规模;

4.      机器执行指令的速度;

测定运行时间的最有效的方法就是计算对计算运行时间有消耗的基本操作的执行次数;

 

2.8 函数的渐进增长:

       判断一个算法的效率时,函数中的常数项和其他次要项可以忽略,更应该关注主项(最高阶项)的阶数;

 

2.9 算法时间复杂度:(算法的时间度量)

      

2.9.1定义:

语句的总执行次数T(n)是关于问题规模n的函数,

T(n)= O (f(n))

       f(n)是问题规模n的某个函数;T(n)增长最慢的算法为最优算法;

       O(n)线性阶

       O(1)常数阶

       O(n2)平方阶

2.9.2 推导大O阶的方法:

l  用常数1取代运行时间中的所有加法常数;

l  在修改后的运行次数函数中,只保留最高阶项;

l  如果最高阶项存在且不是1,则去除与这个项相乘的常数;

2.9.3 常数阶

       都记做O(1);

2.9.4 线性阶

       O(n); ---执行n次;

2.9.5 对数阶

       O(log n); ---例如:

              Int count = 1;

              While( count < n){

                     Count = count * 2;

}

2.9.6 平方阶

 

2.10 常见的时间复杂度

       O(1) < O(log n) < O(n) < O(n log n) < O(n2)< O(n3) < O(2n) < O(n!) < O(nn)

 

2.11 最坏情况与平均情况

       运行时间一般都是指最坏情况的运行时间;

       平均运行时间是指期望的运行时间;

 

2.12 算法的空间复杂度

       算法的空间复杂度通过计算算法所需的储存空间来实现;

S(n)= O(f(n))

       n为问题的规模,f(n)为语句关于n所占储存空间的函数;