算法简介及计算机算法基础——算法学习(四)


接下来的算法学习内容主要根据《程序员必读经典(算法基础+计算机系统)》一书而写,作为读书笔记,感兴趣的可以见参考文档阅读书籍详细内容。😁😁😁

关注算法缘由

最短路径算法:GPS寻找旅行路线
加密算法:安全网站网上购物

使用计算机算法解决计算问题时,我们会关注两个因素一个是给定问题,输入的正确性;第二是运行,算法能够有效利用计算资源。

  • 正确性:一种算法是希望在一定时间找到正确结果,例如进行快速数学计算;另一种算法是近似算法,希望在合理的时间内得出一个近似的最优解。
  • 资源利用:近似算法中,衡量效率的标准时间。(例如GPS寻找最佳线路。);占用计算机内存空间,包括其他资源。

描述计算机算法基础

线性查找

程序:线性查找
输入:一个数组,要查找数组中某个元素个数,查找是否存在某个数值
输出:满足条件数值或者NOT-FOUND
线性查找就是从数组初始值逐步查找是否满足要求。

循环

执行重复操作

迭代

将每次循环操作称为循环的一次迭代

描述运行时间

运行时间可以表示成一个关于输入规模的函数。 前提假定每步单独的操作就会花掉不依赖于输入规模的固定时间。

表示运行时间时,所花费时间不同,但是花费时间存在上界与下界。例如在数量为n的数组A组寻找元素x,所需操作数最少为1,如果A【0】=x;操作数最多为n,如果A【n-1】=x。即使n的数量足够大,所需要的运行时间不能简单表示成关于n的函数。

但是可以用O(n)表示运行时间的上界,用Ω(n)表示运行时间的下界,Θ-符号、O-符号和Ω-符号这几个符号均是渐近符号。因为这些符号记录了随着变量近似趋向于无穷大时函数的增长趋势。所有这些渐近符号均使得我们去掉了低阶项和高阶项的常数因子,以便能够淡化不必要的细节而专注于主要方面:函数是如何随着n增长而变化的

循环不变式

证明正确性的一个常用方法是使用循环不变式证明:即证明循环的每次迭代之前循环不变式为真。循环不变式能够帮助证明循环步骤正确性,关于循环不变式,包含以下3条性质:

初始化:循环的第一次迭代之前,它为真。
保持 :如果循环的每次迭代之前它为真,那么下次迭代之前它仍为真。
终止 :循环终止时,当它确实终止时,伴随循环终止的原因。

以BETTER-LINEAR-SEARCH算法为例,以下是一个循环不变式:
在第1步迭代开始时,如果数组A中存在x,那么x一定在A[i]~A[n]的子数组(数组的一段连续部分)中。
下面使用循环不变式来证明如果程序是在第2步中返回NOT-FOUND,那么数组中一定不包含x。

  • 初始化:初始时,i=1,因此循环不变式的子数组是A[1]~A[n],此时代表整个数组。
  • 保持:假定当前循环变量是i,在迭代开始时,如果数组A中包含x,那么它一定在从A[i]到A[n]的子数组中。如果执行这次循环迭代而没有返回值,我们能得出A[i]≠x,因此能确定地说如果x在数组A内,那么它一定出现在A[i+1]~A[n]的子数组内。因为i在下次迭代之前会自增1,所以循环不变式在下次迭代之前仍为真。
  • 终止:循环一定会终止,或者因为程序会在第1A步返回,或者由于i>n。我们已经对程序因在第1A步返回而导致循环终止的情况进行了验证。
    为了处理因i>n而导致循环终止的情况,我们依据循环不变式的等价性来证明。命题“如果A那么B”的逆否命题是“如果非B那么非A”。一个命题为真当且仅当与它等价的命题也为真。该循环不变式的等价命题为“如果x没有出现在A[i]~A[n]的子数组中,那么数组A中就不存在x”。
    现在,当i>n时,A[i]~A[n]这个子数组为空。因此这个子数组中不可能包含x。因此,根据循环不变式的等价式,x不可能出现在数组A的任意位置上,因此第2步中返回NOT-FOUND是恰当的。

参考文档

【1】《程序员必读经典(算法基础+计算机系统)》;科尔曼,钱晓捷;机械工业出版社;2019.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Paul安

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

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

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

打赏作者

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

抵扣说明:

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

余额充值