算法设计与分析第一堂课笔记复习

算法是解决问题的一种方法或一个过程,是由若干条指令组成的又穷序列,

算法的性质

  • 输入:有零个或多个
  • 输出:"至少一个"
  • 确定性:组成算法的每条指令清晰无歧义
  • 有限性:算法中每条指令和执行次数和执行时间都是有限的。
  • 算法与程序的区别:程序是算法用某种程序设计语言额具体实现的,可以不满足有限性。

1.2算法的复杂性分析

  • 算法的复杂性分为**时间复杂性**和空间复杂性
  • 三种情况下的时间复杂性,可操作性最好最有实际价值的是最坏情况下的时间复杂性。
  • 算法复杂性的渐进分析:O,o,Ω,ω,Θ

1.3递归算法:数据结构、树和二叉树和列表的采用递归方式来,原则上:许多数据结构并不采用递归定义方式,而是直接定义,线性表、字符串和数组等数据结构直接定义方式更自然、更直接了当。

问答题:什么是算法?它与计算过程和程序有什么区别?

答:可以将算法理解为使用计算机解决问题的方法和步骤。算法 是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每条指令 都表示一个或者多个操作。

2.算法研究主要有那些方面?

答:算法设计方面: 有分治法:将问题分解为若干个子问题,分别求解,然后合并子问题得到原问题,例如快速排序、归并排序算法。

动态规划:通过把原问题分解为相对简单的子问题来求解复杂的问题,保存子问题的解避免重复计算,如背包问题,最长公共子问题。

复制代码
贪心算法:对问题求解的时候,总是做出当前看来最好的选择,比如最小生成树,的Prim和Kruskal的算法等等

问:请使用归纳法证明汉诺塔函数的正确性:

答:首先,我们需要理解汉诺塔问题的基本规则和目标。汉诺塔问题涉及三个柱子(A、B、C)和一个或多个大小不同的圆盘。目标是将所有圆盘从起始柱子A移动到目标柱子C,同时在移动过程中必须遵守以下规则:无论问题的结果如何,最终都遵循一个原则

复制代码
每次只能移动一个圆盘。

圆盘在移动过程中必须保持堆叠的状态,且小圆盘不能放在大圆盘上面。

为了证明汉诺塔函数的正确性,我们可以使用数学归纳法,这是一种通过逐步推理来证明定理的方法。具体到汉诺塔问题,我们可以按照以下步骤进行:

基础情况(n=1)‌:当只有一个圆盘时,显然可以直接将这个圆盘从A柱移动到C柱,不需要任何辅助步骤,因此当n=1时,结论成立。

‌归纳假设‌:假设当圆盘数量为n时,可以将所有圆盘从A柱移动到C柱,并且保持小圆盘在大圆盘下面的规则。

‌归纳步骤‌:考虑n+1个圆盘的情况。我们可以将问题分解为三个主要步骤:

首先,将n个圆盘从A柱通过C柱移动到B柱。这一步可以通过归纳假设完成,因为我们有足够的圆盘数量n。

然后,将剩下的一个圆盘(第n+1个)从A柱移动到C柱。

最后,将n个圆盘从B柱通过A柱移动到C柱。同样,这一步也可以通过归纳假设完成。

通过这种方式,我们可以证明,无论圆盘的数量是多少,都可以通过上述三个步骤将其从A柱移动到C柱,同时保持小圆盘在大圆盘下面的规则。这证明了汉诺塔函数的正确

相关推荐
所愿ღ4 小时前
JavaWeb-Servlet基础
笔记·servlet
岑梓铭5 小时前
考研408《计算机组成原理》复习笔记,第五章(2)——CPU指令执行过程
笔记·考研·408·计算机组成原理·计组
No0d1es7 小时前
电子学会青少年软件编程(C/C++)5级等级考试真题试卷(2024年6月)
c语言·c++·算法·青少年编程·电子学会·五级
oe10198 小时前
读From GPT-2 to gpt-oss: Analyzing the Architectural Advances(续)
笔记·gpt·学习
大阳1238 小时前
线程(基本概念和相关命令)
开发语言·数据结构·经验分享·算法·线程·学习经验
weixin_3077791310 小时前
VS Code配置MinGW64编译GNU 科学库 (GSL)
开发语言·c++·vscode·算法
学行库小秘10 小时前
ANN神经网络回归预测模型
人工智能·python·深度学习·神经网络·算法·机器学习·回归
没落之殇10 小时前
基于C语言实现的HRV分析方法 —— 与Kubios和MATLAB对比
算法
秋难降10 小时前
线段树的深度解析(最长递增子序列类解题步骤)
数据结构·python·算法
楚韵天工11 小时前
基于GIS的无人机模拟飞行控制系统设计与实现
深度学习·算法·深度优先·无人机·广度优先·迭代加深·图搜索算法