| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 数据结构入门:时间复杂度 -> 正文阅读 |
|
[数据结构与算法]数据结构入门:时间复杂度 |
目录 1.算法效率如何衡量一个算法的好坏,比如下面的斐波那切数列
虽然只有短短的4行代码,当时这真的是简单的吗? 1.1算法的的复杂度算法在编写成程序后,运行的时候需要消耗时间和空间(内存)资源,因此衡量一个算法的复杂度是从时间和空间两个维度来衡量的,而空间复杂度主要衡量一个算法运行时所需要的额外空间,随着计算机行业的快速发展,计算机的容量已经达到了很高的程度,所以现在没有那么需要关注空间复杂度。 2.时间复杂度2.1对时间复杂度的理解在计算机科学中,算法的时间复杂度是一个函数,他定量的描述了一个函数运行需要花的时间(准确的时间是算不出来的)。而一个算法所花费的时间与他的执行次数有关,所以算法中的执行次数就是算法的复杂度 2.2大O的渐进表示法大O符号(Big O notatiion):是用于描述函数渐进行为的函数(表示空间复杂度和时间复杂度) 推导大O阶的方法: 1.用常数1取代运行时间中的所有加法常数。 2.在修改后的运行函数中,只保留最高阶。 3.如果最高阶存在且不是1,则去除与个项目相乘的常数,得到的结果就是大O阶。 2.3用实例练习
这是一个二分查找函数,假设这个数组是有序的,求此时的算法的时间复杂度? ?在实际情况中,一般都是关注的是最坏的情况,所以上面的题是考虑的最坏的情况 实例2
这段代码中一共运行a+b次,因为a和b是未知的,而且题目中为说明a和b大小的关系(如果a>>b,所以此时的复杂度为O(N),一般写成N,)所以这时候的时间复杂度为O(2N),根据推导大O的方法,所以此时的时间复杂度为O(N); 例3
3 空间复杂度和时间复杂度一样,空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用空间大小的复杂度。同样,空间复杂度也不计算程序占用多少字节。也用大O渐进表示法。 注意:函数运行时所需要的栈空间(存储参数,局部变量,一些寄存信息等等)在编译期间就已经确定,因此这一些都不算在内,所以空间复杂度只有函数在运行的时候显示申请的额外的空间来确定。 3.1实例
这个例子中,每递归一次,程序开辟一次一个额外的空间,一共开辟了N+1个额外空间,所以该例子的空间复杂度为O(N)。
这个例子调用了N次,开辟了N 个栈帧,每个栈帧使用了常数个空间,空间复杂度为O(N)。 4.常见的时间复杂度以及复杂度oj练习例1: ?思路一:根据0~n之间的和为一个等差数列,求出和,再减去数组里面的元素和。数组元素求和一共调用了n次,此时的时间复杂度为O(N)。 ?思路二: 根据异或的特点,创建一个数组包含了o~n的数字,将该数组先和0异或,得到的值再和数组nums进行异或,作何得到的就是两个数组中只出现一次的数字,即数组nums中没有的数字。因为异或是有交换律的,所以不难理解为什么会两个得到那个没有出现过的数字。 例2: 思路一:暴力求解,旋转k次? ;结果:编译不通过 ?思路二:开辟额外的空间,用空间换时间 此时的时间复杂度为O(N),空间复杂度为O(N);能不能使用O(1)来解决这个问题 思路三:对前n-k进行逆置,对后面k个进行逆置,最后最整体进行逆置 ????? 此时时间段复杂度为O(N),,空间复杂度为O(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/26 7:22:50- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |