算法设计与分析第一章

主要知识点

算法与程序
表达算法的抽象机制
描述算法
算法复杂性分析

1、软件开发基本阶段

分析阶段: 弄清所要解决的问题,用一种语言(自然语言、说明语言或数学语言)清楚地描述出来。
设计阶段: 建立系统的结构,重点是算法的设计和数据结构的设计。
编码阶段: 根据设计要求,采用适当的程序设计语言,编写出可执行的程序。 
测试和维护: 发现和排除前几个阶段中产生的错误,在使用中不断地维护和完善。

2、算法

在  有限步骤  内求解问题所使用的一组定义明确的规则。
算法 A 解问题 P把问题 P 的任何实例作为算法 A 的输入每步计算是确定性的A 能够在有限步停机输出该实例的正确的解

3、算法性质

输入:有零个或多个外部量作为算法的输入。
输出:算法产生至少一个量作为输出。
确定性:组成算法的每条指令清晰、无歧义。 
有限性:每条指令的执行次数与执行时间有限。
可行性:算法中的操作都是可以通过已经实现的基本运算执行有限次来实现的

4、程序

是算法用某种程序设计语言的具体实现,它可以不满足算法的“有限性”。
比如。操作系统。
“算法是程序的灵魂,程序是算法的躯体
**在算法的四个性质(确定性、有限性、可行性、输入输出)中,程序不一定具备有限性这一性质。

5、表达算法的抽象表达机制

1、伪代码(Pseudo code)
	一种算法描述语言,不能在编译器上编译通过。使用伪代码的目的是为了使被描述的算法可以容易地以任何一种编程语言(Pascal, C, Java, etc)实现。因此,伪代码必须结构清晰,代码简单,可读性好,并且类似自然语言。
	2、高级程序设计语言
	主要好处是:
	(1)高级语言更接近算法语言,易学、易掌握,一般工程技术人员只需要几周时间的培训就可以胜任程序员的工作;
		2)高级语言为程序员提供了结构化程序设计的环境和工具,使得设计出来的程序可读性好,可维护性强,可靠性高;
	(3)高级语言不依赖于机器语言,与具体的计算机硬件关系不大,因而所写出来的程序可植性好、重用率高;
	(4)把繁杂琐碎的事务交给编译程序,所以自动化程度高,开发周期短,程序员可以集中时间和精力从事更重要的创造性劳动,提高程序质量。
	3、抽象数据类型(ADT)
算法的一个数据模型,连同定义在该模型上并作为算法构件的一组运算。
4、ADT的优点
算法顶层设计与底层实现分离;
算法设计与数据结构设计隔开;
便于空间和时间耗费的折衷;
描述的算法具有很好的可维护性;
算法自然呈现模块化;
为自顶向下逐步求精和模块化提供有效途径和工具;
算法结构清晰,层次分明,便于算法正确性的证明和复杂性的分析。

6、描述算法

本书使用Java,请先掌握Java基本方法。
包括:
1、Java程序结构如:Java程序的两种类型:应用程序和applet;包;
2、Java数据类型及处理方式
3、Java中的方法
4、Java异常
5、Java的类
6、通用方法

7、算法复杂性分析

算法时间复杂度: 针对指定基本运算,计
数算法所做运算次数
算法基本运算次数可表为输入规模的函数
算法复杂性
算法运行所需要的计算机资源的量,需要时间资源的量称为时间复杂性,需要的空间资源的量称为空间复杂性。
假设f(n)为某算法的计算时间,n是问题的大小,g(n)是事先确定的简单函数,如nm,2n,n!等。
几个相关问题:
算法耗费的时间=算法中每条语句的执行时间之和
每条语句的执行时间=语句的执行次数×语句执行一次所需时间
算法转化为程序后,每条语句的执行时间取决于机器的指令性能、速度以及编译所产生的代码质量等难以确定的因素
进行算法复杂性分析时,一般独立于机器的软硬件系统,即设每条语句执行一次的时间均为单位时间
  1. 符号O(上界):

     如果存在两个正的常数c和自然数n0,对所有n≥n0,有 f(n) ≤cg(n)成立,则称函数f(n)当n充分大时有上界,且g(n)是计算时间f(n)的一个上界函数,则记作 f(n)=O(g(n)),
    	O为数量级(阶数), f(n)的数量级是g(n) ,又称为 f(n) 的阶不高于g(n)的阶。可能存在多个正数c,只要指出来一个即可。
    	例:
    	设f(n) =  n2+ n,则
    	f(n)=O(n2),即取c = 2,n0 = 1即可
    	f(n) = O(n3),取c = 1,n0 = 2即可
    O的运算规则:
    加法规则 针对并列程序段O(f)+O(g)=O(max(f,g));
    乘法规则:
     针对嵌套程序段O(f)O(g)=O(fg);
    如果g(N)=O(f(N)),则O(f)+O(g)=O(f);O(Cf(N))=O(f(N)),
    其中C是一个正的常数;
    f=O(f) ;
    例:T(n)=5n3 + 100 n2 +1 用记号o可表示为O(n3)
    
  2. 常见阶的大小的比较
    O(1)<O(log n) <O(n)<O(nlog n)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)

  3. 符号Ω(下界):

    定义:如果存在两个正常数c和n0,对所有n≥n0,有 f(n) ≥ cg(n)
    成立,则称函数f(n)当n充分大时有下界,g(n)是计算时间f(n)的一个下界函数,则记作f(n)=Ω(g(n)),
    又称为 f(n) 的阶不低于g(n)的阶。
    能存在多个正数c,只要指出来一个即可。
    
  4. 符号o的定义:

    对于任意给定的ε>0,都存在正整数N0,使得当N>=N0时有   f(N)/g(N)<=ε
    成立,则称函数f(N)当N充分大时的阶比g(N)低,记为f(N)=o(g(N))。
     例如,4NlogN+7=o(3N2+4NlogN+7)。 
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wmpreturn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值