4.14 数据结构与时间复杂度分析

一、时间复杂度分析

常见类型:O(1)<O(logn)<O(n)<O(nlog n)<O(n²)<O(2ⁿ)<O(n!)

常数阶 O(1):  数量大小与输入数据 n 大小无关

线性阶 O(n):  数量大小与输入数据n成正比

平方阶 O(n²):  数量大小与输入数据成平方关系

指数阶 O(2ⁿ):  数量每轮一分为二,形成数列 1,2,4,8,16,......,

对数阶 O(log n):  数量每轮缩减一半,形成数列,如:,, ,....,16,8,4,2,1

线性对数阶 O(nlog n):  数量每轮缩减一半后再与输入数据成正比增加

阶乘阶 O(n!):  数量每轮依次加上  自身与 (1 ~ n)

最差与最佳时间复杂度:
当 nums = [?,?,...,1],即当末尾元素是1时,则需完整遍历数组,此时达到最差时间复杂度 0(n);

当 nums = [1,?,?,...],即当首个数字为1时,无论数组多长都不需要继续遍历,此时达到最佳时间复杂度

二、空间复杂度分析   

算法相关空间

常见类型:
O(1) < O(log n) < O(n) < O(n²) < O(2ⁿ)

常数阶 O(1):  空间数量与数据大小无关,常数、变量、对象占用 O(1)空间

对数阶 O(log n):  常见于分治算法、数据类型转换、归并排序

线性阶 O(n):  元素数量与N呈线性关系的任意类型集合(常见于一维数组、链表、哈希表等),皆

使用线性大小的空间

平方阶 O(n²):  元素数量与N呈平方关系的任意类型集合(常见于矩阵),皆使用平方大小的空间

指数阶 O(2ⁿ):  对数阶常出现于分治算法的栈帧空间累计、数据类型转换等

三、数据结构

数据结构 = 逻辑结构 + 物理结构(顺序、链式、索引、散列)

逻辑结构:数据元素间抽象化的相互关系 

物理结构:(存储结构) 在计算机存储器中的存储形式

1、数据结构逻辑分类

(1) 线性结构:

数据结构中的元素存在一对一的相互关系;

常见的线性结构:

线性表,栈,队列,串(一维数组)等。

(2)树形结构

数据结构中的元素存在一对多的相互关系;

常见树形结构:

二叉树,红黑树,B 树,哈夫曼树等。

(3)图形结构

数据结构中的元素存在多对多的相互关系;

常见图形结构:

有向图,无向图,简单图等。

2、链表结构

链表结构是由许多节点构成的,每个节点都包含两部分:

(1)数据部分:保存该节点的实际数据。

(2)地址部分:保存的是上一个或下一个节点的地址。

链表的特点:

(1)结点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理上不一定相邻。

(2)访问时只能通过头或者尾指针进入链表,并通过每个结点的指针域向后或向前扫描 其余结点,

所以寻找第一个结点和最后一个结点所花费的时间不等。

链表的优缺点:

(1)优点:数据元素的个数可以自由扩充 、插入、删除等操作不必移动数据,只需修 改链接指针,

修改效率较高。

(2)缺点:必须采用顺序存取,即存取数据元素时,只能按链表的顺序进行访问,访问 节点效率较

低。

3、数组结构

数组是一种 线性表 的数据结构, 连续的空间 存储 相同类型 的数据。

优点:查询速度快。

缺点:数组在创建时大小确定,无法扩容。数组只能存储一种类型的数据。添加、删除元素慢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值