今天给各位分享顺序表的时间复杂度的知识,其中也会对数据结构线性表的算法复杂度分析进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录
- 简述顺序表和链表的优缺点及适用范围
- 顺序查找的时间复杂度
- 顺序表求表长的时间复杂度为啥为01
- ...为什么说它的时间复杂程度O(n)而不是O(n/2)
- 时间性能是指算法的时间复杂度
- 在顺序表中插入一个元素的时间复杂度是多少
- ...插入操作的过程,计算顺序表插入过程的时间复杂度
一、简述顺序表和链表的优缺点及适用范围
1、长度固定,必须在分配内存之前确定数组的长度。
2、存储空间连续,即允许元素的随机访问。
3、存储密度大,内存中存储的全部是数据元素。
4、要访问特定元素,可以使用索引访问,时间复杂度为$O(1)$。
5、要想在顺序表中插入或删除一个元素,都涉及到之后所有元素的移动,因此时间复杂度为$O(n)$。
6、顺序表最主要的问题就是要求长度是固定的,可以使用倍增-复制的办法来支持动态扩容,将顺序表变成“可变长度”的。
7、这个办法不可避免的会浪费一些内存,因为数组的容量总是倍增的。而且每次扩容的时候,都需要将旧的数据全部复制一份,肯定会影响效率。不过实际上,这样做还是直接使用链表的效率要高。
8、存储空间不连续,数据元素之间使用指针相连,每个数据元素只能访问周围的一个元素(根据单链表还是双链表有所不同)。
9、存储密度小,因为每个数据元素,都需要额外存储一个指向下一元素的指针(双链表则需要两个指针)。
10、要访问特定元素,只能从链表头开始,遍历到该元素,时间复杂度为$O(n)$。在特定的数据元素之后插入或删除元素,不涉及到其他元素的移动,因此时间复杂度为$O(1)$。双链表还允许在特定的数据元素之前插入或删除元素。
二、顺序查找的时间复杂度
(1)更好情况:要查找的之一个就是。时间复杂度为:O(1)
(2)最坏情况:最后一个是要查找的元素。时间复杂度未:O(n)
(3)平均情况下就是:(n+1)/2。
所以总的来说时间复杂度为:O(n)
2、二分查找:O(log2n)->log以2为底n的对数
3、插值查找:O(log(2)(log(2)n))->log以2为底的(log以2为底的n的对数)的对数
4、斐波那契查找:O(log2n)->log以2为底n的对数
(1)二叉树:O(log2n)~O(n)之间
6、分块查找:O(log2n)~O(n)之间
三、顺序表求表长的时间复杂度为啥为01
顺序表求表长的时间复杂度为01由于顺序存储可以实现随机存取。顺序存储可以实现随机存取,因此访问结点的时间复杂度为O(1),而插入、删除结点由于涉及到大量移动元素,故其时间复杂度为O(n)。用存储结点的物理位置来体现结点之间的逻辑关系的存储 *** 。
四、...为什么说它的时间复杂程度O(n)而不是O(n/2)
1、时间复杂度指算法执行过程中所需要的基本运算次数。你的只是一个大体评估的方式。
2、---------------------------------------------------------------------
3、大O表示法是根据数据梯度产生的变化而评估。
4、-----------------------------------------------------------------------
5、大O表示法表示时间复杂度的时候取一个下限即可,不用那么精确。
6、-----------------------------------------------------------------------------------------
7、可能你认为o(N)和o(N/2)有区别,但实际上这两者对于大O表示法表示的时间复杂度来说没区别,大O表示法表示的时间复杂度关注的是数据量的增长导致的时间增长情况,o(N)和o(N/2)在数据量增加一倍的时候,时间开销都是增加一倍(线性增长)。所以都认为是O(N)
8、-------------------------------------------------------------------------------------------
9、但是程序优化的时候就要精确评估了!能提高多少就提高多少。
五、时间性能是指算法的时间复杂度
所谓时间性能是指基于某种存储结构的基本操作(即算法)的时间复杂度。像取出线性表中第i个元素这样的按位置随机访问的操作,使用顺序表更快一些,时间性能为O(1);相比之下,链表中按位置访问只能从表头开始依次向后扫描,直至找到那个特定的位置,所需要的平均时间为O(n)。在链表中进行插人和删除操作不需要移动元素,在给出指向链表中某个合适位置的指针后,插入和删除操作所需的时间仅为O(1);在顺序表中进行插入和删除操作需移动元素,平均时间为O(n),当线性表中元素个数较多时,特别是当元素占用的存储空间较多时,移动元素的时间开销很大。作为一般规律,若线性表需频繁查找却很少进行插入和删除操作,或者操作和“数据元素在线性表中的位置”密切相关时,宜采用顺序表作为存储结构;若线性表需频繁进行插入和删除操作,则宜采用链表作为存储结构。
六、在顺序表中插入一个元素的时间复杂度是多少
更好情况:新元素插入到表尾,则不需要移动元素i=n+1,循环0次;即更好时间复杂度=O(1)最坏情况:新元素插入到表头,则表中的n个元素需要全部移动i=1;循环n次,最坏时间复杂度=O(n)平均:新元素插入有(n+1)种选择,即插入每个位置的概率都是p=1/(n+1)平均循环次数:=np+(n-1)p+…+1*p=n/2即平均时间复杂度=O(n)
七、...插入操作的过程,计算顺序表插入过程的时间复杂度
1、Pi(n-i+1)指的是插入i元素以后,需要移动的元素的个数,在之一个元素后面插入元素i需要移动n个元素,在第二个元素后面插入元素i需要移动元素(n-1)个元素;
2、依此论推,在第n个元素后面插入元素i需要移动1个元素,这是一个等差数列,首项为n,公差为1,最后一项是1,求和以后需要除以(n+1)就算出来结果了。
3、一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n))为算法的渐进时间复杂度,简称时间复杂度。
4、在各种不同算法中,若算法中语句执行次数为一个常数,则时间复杂度为O(1),另外,在时间频度不相同时,时间复杂度有可能相同,如T(n)=n2+3n+4与T(n)=4n2+2n+1它们的频度不同,但时间复杂度相同,都为O(n2)。
5、参考资料来源:百度百科-时间复杂性
END,本文到此结束,如果可以帮助到大家,还望关注本站哦!