| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> python每日算法——算法的起步与递归算法(汉诺塔问题) -> 正文阅读 |
|
[Python知识库]python每日算法——算法的起步与递归算法(汉诺塔问题) |
创作不易,来了的客官点点关注,收藏,订阅一键三连?😜?
?目录 算法(algorithm)算法是一组完成任务的指令,任何代码片段偶可以视为算法。 算法的速度 并非指的是时间,而是操作数的增速;随着输入的增加,其运行时间将以什么样的速度增加。 用大O表示,大O是什么呢? 时间复杂度时间复杂度:用来评估算法运行效率的一个式子 常见的基本时间复杂度print("hello")???????? ???????????????????????????????????????????? 时间复杂度:O(1) for i in range(n) ???? print("hello")??????????????????????????????????????????????? 时间复杂度:O(n) for i in range(n) ??? for j in range(n)???? ???????????? print("hello")???????????????????????????????????????? 时间复杂度:O(n2) for i in range(n) ???? for j in range(n) ????????? for k in range(n) ???????????????? print("hello")?????????????????????????????????????? 时间复杂度:O(n3) print("hello") print("hello2") print("hello3")???????????????????????????????????????????????? 时间复杂度:是不是O(3)?不是---->O(1),一个量级一个统一表示。类似于我们几个小时的时候忽略了几小时的几分钟 for i in range(n) ??? print("hello") ??? for j in range(n)???? ???????????? print("hello")??????????????????????????????????????? 时间复杂度:是不是O(n2+n)?不是,O((n2) while n>1 ??? print(n) ??? n = n//2 n=64时,输出6次,log264=6 时间复杂度:O(logn)--->循环迭代出现规模减半的时候出现的时间复杂度 总结1.一般来说,时间复杂度高的算法比复杂度低的算法慢 常见时间复杂度排序(效率高到低) O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3) 2.大O::指出了算法的运行时间,O(n)中n表示次数;指出了最糟情况下的运行时间。 O(n),线性时间,线性查找。 O(log n), 对数时间,二分查找。 O(n*log n),快速排序。 O(n^2),选择排序。 O(n!),旅行商问题解决方案。 ?思考:如何简单快速判断算法复杂度?①确定问题规模n ②是否循环减半?--->logn ③K层关于n的循环 -->nk ④对于复杂情况:根据算法执行过程判断 空间复杂度空间复杂度:用来评估算法内存占用大小的式子 空间复杂度表示方法空间复杂度的表示方法与时间复杂度完全一样 算法使用了几个变量:O(1) 算法使用了长度为n的一维列表:O(n) 算法使用了m行n列的二位列表:O(mn) 递归递归的两个特点调用自身 结束条件 以下函数哪些是递归? func1()? --> 不是,没有结束条件 func2()? -->? 不是,伪结束条件 func3()? -->?? 属于递归,func3(3) 输出:3,2,1 func4()? -->?? 属于递归,func4(3) 输出:1,2,3 汉诺塔问题如何移动? n=2时: n个盘子时: 此时只有第二步移动一步,第一步和第三步移动了n-1个盘子,它是比原问题规模(n)小了1的子问题,可以理解为递归。 汉诺塔问题的递归算法代码
由此: 1个盘子 --> 1步 2个盘子 --> 3步 3个盘子 --> 7步 ……. n个盘子 --> h(n)==h(n-1)+1+h(n-1)=2h(n-1)+1 创作不易,客官点个赞吧!评论一下!一起加油?😜?? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 12:27:53- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |