线性表中数据操作的时间复杂度分析
数据操作的时间复杂度主要由磁盘寻道所消耗的时间所决定,同时在磁盘中通过寻道查找相应数据所需要的时间又由数据在磁盘中的存储形式所影响。想要更加透彻的了解时间复杂度问题,就需要对磁盘的存储原理有一个清楚认识。所以推荐大家一片详细讲解磁盘原理的博客,非常nice!影响机械磁盘速度的因素:寻道时间、旋转延迟、数据传输时间
一、线性表
线性表分为顺序表和链表,顺序表是指数据在磁盘中存储在连续地址上,如数组;链表指数据在磁盘中存储地址不连续。顺序表进一步可分为有序和无序两种,即各数据是否遵循从小到大或从大到小的顺序依次存储。同理链表可分为有序和无序两种。有序顺序表又要根据各数据间是否存在固定的数学规律,如等差、等比,从而分为有规律及无规律两种。大致分类如下图:
分别对不同类型线性表进行“增删改查”操作时时间复杂度进行分析:
1、有序有规律线性表
设有如下数据按有序有规律线性表形式存储在磁盘中:
1 2 3 4 5 6 7 8 9
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |||
查:可通过首元素地址增加相应数量个数据单位大小,跳转到相应位置查询所需数据。例如首元素地址为12,查找数据6,则根据元素间数学规律得知数据6在首地址后第5个位置处,则直接寻址到地址(12+5)位置,即数据6所在地址位置为17。从而得出时间复杂度为O(1).
改:同“查”操作相似,在查找后将所在位置数据修改为相应值,时间复杂度为O(1),然后根据修改后数据的大小重新确定数据应在有序链表中所处的位置,并移动到相应位置,时间复杂度为O(n)。
删:通过“查”操作找到相应数据后删除,时间复杂度为O(1),删除位置后的数据依次前移1个数据单位,时间复杂度为O(n),则整个删除过程的时间复杂度为O(n).
增:增加操作首先要考虑线性表中是否还有闲余位置,如果没有则需要开辟更大空间的线性表,并将原表复制过去。将预定插入位置及之后的数据依次后移1个单位,将数据插入到指定位置,之后根据数学规律确定数据在表中应处位置并进行调整。总的时间复杂度为O(n)。
2、有序无规律线性表
设有如下数据按有序无规律线性表形式存储在磁盘中:
2 4 7 10 13 22 41 58
2 | 4 | 7 | 10 | 13 | 22 | 41 | 58 | ||||
查:通过二分法查找,时间复杂度为O(log2n)。
改:将数据插入到指定位置,之后根据二分法确定数据应处位置并进行调整,时间复杂度为O(log2n).
删:通过“查”操作找到相应数据后删除,时间复杂度为O(log2n),删除位置后的数据依次前移1个数据单位,时间复杂度为O(n),则整个删除过程的时间复杂度为O(n).
增:增加操作首先要考虑线性表中是否还有闲余位置,如果没有则需要开辟更大空间的线性表,并将原表复制过去。将预定插入位置及之后的数据依次后移1个单位,将数据插入到指定位置,之后通过二分法确定数据在表中应处位置并进行调整。总的时间复杂度为O(n)。
3、无序顺序表
设有如下数据按无序顺序表形式存储在磁盘中:
3 1 9 15 7 3 2 4
3 | 1 | 9 | 15 | 7 | 3 | 2 | 4 | ||||
查:通过循环遍历每一个元素查找,时间复杂度为O(n)。
改:同“查”操作相似,只要在查找后将所在位置数据修改为相应值,时间复杂度为O(n).
删:通过“查”操作找到相应数据后删除,时间复杂度为O(n),删除位置后的数据依次前移1个数据单位,时间复杂度为O(n),则整个删除过程的时间复杂度为O(n).
增:增加操作首先要考虑线性表中是否还有闲余位置,如果没有则需要开辟更大空间的线性表,并将原表复制过去。将指定位置及之后的元素依次后移1个数据单位,时间复杂度为O(n),然后在相应位置插入数据,整个增加过程的时间复杂度为O(n).
二、链表
1.有序链表
设有如下数据按有序链表形式存储在磁盘中:
2 4 6 11 15 22 61 95
4 | 11 | 15 | |||||||||
2 | 95 | 61 | |||||||||
6 | 22 |
查:通过循环遍历查找,时间复杂度为O(n)。
改:通过“查”操作,在查找后将所在位置数据修改为相应值,然后通过循环遍历找到新修改的数据在有序链表中应该的位置,并进行相应调整。时间复杂度为O(n).
删:通过“查”操作找到相应数据后删除,时间复杂度为O(n),使所删除的前一个数据的指针指向后一个数据,时间复杂度为O(1),则整个删除过程的时间复杂度为O(n).
增:通过循环遍历到相应位置,将元素插入此处,然后通过循环遍历找到新修改的数据在有序链表中应该的位置,并进行相应调整。时间复杂度为O(n).
2.无序链表
设有如下数据按有序链表形式存储在磁盘中:
23 12 61 11 15 9 61 33
12 | 15 | 33 | |||||||||
23 | 61 | ||||||||||
11 | 61 | 9 |
查:通过循环遍历查找,时间复杂度为O(n)。
改:通过“查”操作,在查找后将所在位置数据修改为相应值。时间复杂度为O(n).
删:通过“查”操作找到相应数据后删除,时间复杂度为O(n),使所删除的前一个数据的指针指向后一个数据,时间复杂度为O(1),则整个删除过程的时间复杂度为O(n).
增:通过循环遍历到相应位置,将元素插入此处。时间复杂度为O(n).
第一次撰写博客,有很多不足之处,敬请大佬们指正。
线性表中数据操作的时间复杂度分析相关推荐
- SQL数据库插入、修改、删除及删除表中数据操作示例(insert、update)
目录: 1.数据库的连接.创建 2.对字段的操作:(alter table) 3.SQL数据库插入.修改.删除操作 4.数据库的查询操作大全(select) 5.多表查询(join on) 6.约束操 ...
- python处理excel表格数据-利用Python处理和分析Excel表中数据实战.doc
利用Python处理和分析Excel表中数据实战 [利用python进行数据分析--基础篇]利用Python处理和分析Excel表中数据实战 原创 2017年06月28日 15:09:32 标签: p ...
- code的bootstrap如何有提示 vs_如何用DataFocus对Excel表中数据进行分析?
常见的数据分析方法有 结构分析.对比分析.平均分析和交叉分析等等.那么,如何用DataFocus进行数据分析?如何对Excel表中数据进行分析呢?接下来,我们先简单看下对Excel表中数据进行结构分析 ...
- python和excel数据分析_利用Python处理和分析Excel表中数据实战
作为一个学习用Python进行数据分析的新手来说,通过本文来记录分享一些我在用Python中的pandas.numpy来分析Excel表中数据的数据清洗和整理的工作,目的是熟悉numpy以及panda ...
- c语言两个线性表la lb,有两个集合用两个线性表LA和LB表示即线性表中的数据元素即为集合中的成员现要求一个新的集合...
<有两个集合用两个线性表LA和LB表示即线性表中的数据元素即为集合中的成员现要求一个新的集合>由会员分享,可在线阅读,更多相关<有两个集合用两个线性表LA和LB表示即线性表中的数据元 ...
- 表的插入、更新、删除、合并操作_21_合并表中数据
合并表中数据 需求描述 需求:如果emp_temp表中的员工存在于emp中,则将他们的提成(comm字段)更新为1000; 对于提成已经更新为1000的员工,如果他们的工资(SAL字段)少于2000, ...
- DML操作(表中数据)
DML是什么? 通过DML实现表中数据的操作 插入数据:insert 查询数据:select 更新数据:update 删除数据:delete 插入数据insert 语法:insert into 表名( ...
- java 线性表的表示和实现_线性表中顺序表的的理解和实现(java)
线性表的顺序表示指的是用一组地址连续的存储单元以此存储线性表的数据元素,这种表示也称作线性表的顺序存储结构或顺序映像.通常,称这种存储结构的线性表为顺序表.特点是:逻辑上相邻的数据元素,其物理次序上也 ...
- PHP数据结构之三 线性表中的单链表的PHP实现
线性表的链式存储:用一组任意的存储单元存储线性表中的数据元素.用这种方法存储的线性表简称线性链表. 链式存储线性表的特点:存储链表中结点的一组任意的存储单元可以是连续的,也可以是不连续的,甚至是零散分 ...
最新文章
- 震旦ad208如何进入维修模式_今天才知道!华为手机维修时要开启这个功能,防止隐私被他人查看...
- php 数组美化_PHP格式化输出数组,一目了然
- OpenCV-Python 雪花飘落特效
- vsftpd 配置:chroot_local_user与chroot_list_enable详解
- UA MATH566 统计理论2 点估计基础
- 个人创业做什么好?以下这几个值得考虑
- U3D physics总结
- C .Adding Powers codeforces(位运算思维)
- [Leedcode][JAVA][第11题][盛最多水的容器][双指针][贪心]
- vue 写bean_vue+jsp+删除一个bean
- 请教如何维护好iis服务器?
- 微信DAT文件转JPG图片(图片恢复)
- 水溶性CdSe/ZnS量子点(520nm)
- pandas处理excel单元格合并后的列
- java graphics2d 绘图_java GUI Graphics2D 绘图
- 粗效过滤器安装技术参数
- CAD批量画八边形风机基础平台
- 华为荣耀9青春版系统向鸿蒙,华为荣耀9青春版EMUI8.0刷回官方原版recovery的教程...
- jis计算机基础知识讲课,计算机基础知识——中文输入法教学教案.ppt
- WPF编程,使用字体图标的一种方法。