【数据结构】第零章

计算

既是对象:规律、技巧
又是目标:高效、低耗
这里写图片描述

这里写图片描述

Hailstone序列无法确定有穷还是无穷,因此不能算是算法(但可以写出程序)

程序≠算法

好算法最重要的是:效率
这里写图片描述

计算模型

图灵机
这里写图片描述
RAM模型
好处:能够客观度量算法时间(通过计算步骤次数)

这里写图片描述

大O记号(考虑最坏情况下)

不断放大,直至可以用常数表示
这里写图片描述

这里写图片描述

另外两种记号
这里写图片描述

高效解
不含转向(循环、调用、递归等),必顺序执行,即是O(1)
但也要具体问题具体分析
这里写图片描述

这个属于高效解,因为无限接近于O(1)

这里写图片描述

有效解
这里写图片描述

难解
这里写图片描述
指数形式为intractable,与多项式有明显分界

增长速度
要放眼长远

这里写图片描述

算法分析

这里写图片描述

这里写图片描述

封底估算
直观感受时间
这里写图片描述

迭代与递归

迭代特点:
这里写图片描述
变成一个可以轻易解决的平凡问题,和与原问题类似的子问题

递归跟踪:

这里写图片描述
递推方程:

这里写图片描述

这里写图片描述
分而治之:
这里写图片描述

减而治之的算法中,递归实例分别是:1个规模为n的实例、1个规模为n-1的实例、1个规模为n-2的实例、…,共有n个。

分而治之的算法中,递归实例分别是:1个规模为n的实例、2个规模为n/2的实例、4个规模为n/4的实例、…,共有1+2+4+8+…+n个。

递归跟踪与递推方程都是用于计算时间复杂度
递归跟踪直接忽略递归式,计算每一个递归里面的时间,再乘上递归的个数
递推方程需要列出递推式(n与n-1关系),再递推到n与1的关系,得到n的式子

二分递归:
这里写图片描述

动态规划

递推方程:
fib数列时间复杂度计算过程

这里写图片描述

封底估算:
这里写图片描述

这里写图片描述

递归跟踪:
用递归跟踪的方式分析为什么计算速度慢:大量递归实例被重复计算

这里写图片描述
这里写图片描述

迭代:
用新的方法计算fib

这里写图片描述

最长公共子序列:
这里写图片描述

LCS:递归
减而治之的思路求解LCS
这里写图片描述
情况1为一个递归基

分而治之
这里写图片描述

LCS:理解
这里写图片描述

LCS:复杂度
这里写图片描述
大量雷同的子情况导致复杂度高

LCS:动态规划
这里写图片描述

逆向计算
这里写图片描述

这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_38705903/article/details/79420722