| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【数据结构】算法的时间复杂度和空间复杂度 -> 正文阅读 |
|
[数据结构与算法]【数据结构】算法的时间复杂度和空间复杂度 |
目录1.摘要 1.摘要本文浅析算法的时间复杂度与空间复杂度以及它们的求解方式 2.如何衡量算法的好坏上一节我们讲到,算法是解决特定问题时求解步骤的描述,在计算机中表现为指令的有限序列,且每条指令表示一个或多个步骤。 显然,就像求解高中数学解析几何题一样,面对同一个问题,我们可以想到许许多多的解法,有的解法寥寥数行便能计算出结果,而有的写了一页纸还不够。 显然,放到我们这边的算法身上,我们当然希望我们采用的算法能够既正确,又简洁,有很高的效率。 我们在想,究竟一个好的算法要具备怎样的条件呢? 算法是解决问题的步骤,那么,执行的步骤越短,消耗的时间就越少;另一方面,算法在计算机中表现为指令的有限序列,就需要占用存储空间,那么占用的存储空间肯定越少越好。 是不是可以称为时间效率、空间占用呢? 于是,我们便想出了几个衡量不同算法的优劣程度的指标——时间复杂度与空间复杂度。 时间复杂度衡量一个算法运行的快慢,空间复杂度衡量一个算法运行所需的额外的空间。在计算机发展的早期,存储空间很小,人们非常关注空间复杂度,而随着几十年的发展,存储空间已经足够的大了,空间复杂度便不再那么重要了。 3.时间复杂度算法的时间复杂度在理论上是时间的函数,描述了一个算法执行所需的时间。诚然,这样是一种很直接的判断方法,但是,这就意味着我们要将算法用代码形式先实现再上机跑。另外,你有没有想过,算法运行出来的时间应该和谁去比较呢?由于硬件的不同,程序在不同电脑上运行的时间一定会有所差异。你说一直用同一台机器跑?难道全世界程序员都用一台机器吗?最后,我们怎么选择算法的测试用例呢?比如测试不同的排序算法的优劣,测试用例是10个数,基本所有排序算法都是一瞬间的事儿;那100万个数咋样?嗯,确实能够比出高下,那为什么不是200万个数呢?所以说,如何选取测试用例根本就不能达成一致。 于是乎,尽管从理论上来讲算法的时间复杂度应该是时间的函数,但在实际操作中,我们发现这样的衡量方式简直过于不切实际,都是事后诸葛亮的做法。 那我们只能采取事前分析估算法了。我们在计算机程序编制前,依据统计方法对于算法进行估算,也就是以算法中执行的基本操作的次数衡量时间复杂度。 而且,当我们在统计上述基本操作的数量时,我们也是估算,并不需要计算精确的执行次数。这就是大O渐进表示法。 哦,原来算法的时间复杂度看的不是程序运行了几分钟、几小时啊! 4.大O渐进表示法大O符号:用来描述函数渐进行为的数学符号 推导大O阶方法:
举个栗子:
那么,用大O渐进表示法则可表示为:
再举个栗子:
怎么只有个常数8呢?
我们可以看到,大O渐进表示法只留下了原表达式中导数最大的项。
5.时间复杂度计算举例例一:
例二:
例三:
例四:
例五:
例六:
例七:
例八:
答案及分析:
实际上,时间复杂度取决于一阶导数最大的一项: 6.空间复杂度现在,我们喜欢用空间换取时间。空间实在是很便宜。 类比时间复杂度,空间复杂度用以衡量实现算法所需的输入、指令、变量、常量、数据操作等所占存储空间大小的函数。实际上,抛去与算法本身无关的输入,空间复杂度只考虑与算法本身有关的辅助单元的大小。 而我们在计算空间复杂度时,同样地,并不是去考虑这个算法写出来占了多少字节的空间,而是统计这个算法的变量个数,也采用大O渐进表示法。 例一:
例二:
例三:
7.参考文献
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年12日历 | -2024/12/30 0:51:55- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |