算法分析与设计(第一章 算法基础)

目标:掌握衡量算法效率的时间复杂度和空间复杂度概念, 以及算法的最好、平均和最坏情况时间复杂度,渐进表示法。

1、算法是指解决问题的一种方法或一个过程。

算法是对特定问题求解步骤的一种描述,是指令的有限序列

2、算法的5个特征

输入:0个或多个输入。

输出:至少产生一个输出。

确定性:每一条指令都有确切的定义,无二义性。

有穷性:必须执行有限步之后终止。

可行性:算法的每一条指令都必须足够基本。

3、一个好的算法应具有的特性:正确性、鲁棒性、简明性、高效性。

4、算法的描述方法:自然语言、流程图、程序设计语言、伪代码。

5、冒泡排序:属于基本交换思想的排序方法。它将相邻的两个元素加以比较,若左边元素值大于右边元素值,则将这两个元素交换;若左边元素值小于等于右边元素值,则这两个元素位置不变。右边元素继继和下一个元素进行比较,重复这个过程,直到比较到最后一个元素为止。

冒泡排序的伪代码

BUBBLE-SORT(A) 
    for i <- 1 to length[A] 
        do for j  <- length[A] downto i + 1  
            do if A[j] < A[j – 1] 
                then exchange A[j] <-> A[j – 1]

6、语言选择(从C到C++)

C语言中没有bool类型,C++语言中,增加了bool基本类型

C语言中用结构体定义变量:

       struct  结构体名 变量名

       C++中“struct”可以省略

7、函数重载:C++允许多个函数拥有相同的名字,只要它们的参数列表不同就可以。

函数重载本质上说还是定义了三个功能相同、函数体相同的函数、仍然不够节省代码。

9、程序是算法用某种程序设计语言的具体实现,程序可以不满足有穷性。

10、算法分析:对算法的执行时间和所需空间的估算。

11、算法确认

①算法确认:确认一个算法是否正确的活动。

②算法证明:使用数学方法证明算法的正确性。

③程序测试:是指对程序模块或程序总体,输入事先准备好的样本数据(称为测试用例),检查该程序的输出,来发现程序存在的错误及判定程序是否满足其设计要求的活动

12、算法求解问题的过程

13、影响程序运行时间的因素主要有:

①程序所依赖的算法;

②问题规模和输入数据;

③计算机系统性能。

14、最常见的多项式时间算法的渐近时间复杂度

       O(1)<O(log n)<O(n)<O(nlog n)<O( )<O( )

       最常见的指数时间算法的渐近时间复杂度

       O( )<O(n!)<O( )​​​​​

15、渐近表示

大O记号:设函数f(n)和g(n)是定义在非负整数集合上的正函数,如果存在两个正常数c和 ,使得当n≥ 时,有f(n)≤cg(n),则记做f(n)=O(g(n)),称为大O记号。

  该算法的运行时间不会超过g(n)的某个常数倍。g(n)是该算法运行时间的上界。

Ω记号:设有函数f(n)和g(n)是定义在非负整数集合上的正函数,如果存在两个正常数c和 ,使得当n≥ 时,有f(n)≥cg(n),则记做f(n)=Ω (g(n)),称为Ω记号。

  该算法至少需要g(n)的某个常数倍大小的时间量。g(n)是该算法运行时间的下界。

​​​记号:设有函数f(n)和g(n)是定义在非负整数集合上的正函数,如果存在正常数使得当n≥ 时,有 g(n)≤f(n)≤ ​​​​​​​g(n),则记做f(n)= ​​​​​​​(g(n)),称为 ​​​​​​​记号。

  该算法实际运行时间大约为g(n)的某个常数倍大小的时间量。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值