数组和链表的常用操作时间复杂度分析

数组

    1.无序数组
          

操作时间复杂度
查询O(1)
插入(空间充足)O(1)
插入(空间不足)O(n)+O(1)=O(n)
删除(末尾元素)O(1)
删除(非末尾元素且元素个数>1)O(1)+O(n)=O(n)

    分析

                1.查询:通过index直接定位,即O(1)。

                2.插入分为以下两种情况:

                    2.1 空间充足:无序数组不需要考虑插入位置,直接插入到末尾,即O(1)。

                    2.2 空间不足:如果空间不足,则需要将整个数组移动到另一个空间,再添加元素,即O(n)。

                3.删除分为以下两种情况:

                    3.1 删除末尾元素:删除末尾不需要考虑移动元素位置,即O(1)。

                    3.2 非末尾元素且元素个数>1:删除操作O(1)+移动元素位置O(n)=O(n)。


    2.有序数组

操作时间复杂度
查询O(1)
插入(基于二分查找法)O(log2n)+O(n)=O(n)
插入(基于顺序查找法)O(n)+O(n)=O(n)
删除(末尾元素)O(1)
删除(非末尾元素且元素个数>1)O(1)+O(n)=O(n)

    分析

          1.查询:通过index直接定位,故时间复杂度为O(1)。

          2.插入有序数组的插入需要考虑插入位置,即分下列两种情况查询插入位置:

              2.1 二分查找法
                    二分查找法的时间复杂度为O(log2n),移动元素位置的时间复杂度为O(n),即O(log2n)+O(n)=O(n)。
              2.2 顺序查找法
                    顺序查找法查找的时间复杂度为O(n),移动元素位置的时间复杂度为O(n),即O(n)+O(n)=O(n)。
              ps:如果数组本身无序,还需要进行排序的话,使用冒泡排序复杂度达到o(n^2)。    

          3.删除分为以下两种情况:

              3.1 删除末尾元素:删除末尾不需要考虑移动元素位置,即O(1)。

              3.2 非末尾元素且元素个数>1:删除操作O(1)+移动元素位置O(n)=O(n)。
    

链表(单向链表)

    1.有序链表(失去了链表插入快的特性)

操作时间复杂度
查询O(n)
插入O(n)
删除O(n)+O(1)=O(n)

    分析

          1.查询:依次比较,最好情况下第一个就是即o(1),最坏情况o(n),取最坏情况o(n)。

          2.插入:有序链表的插入需要先查询到该插入的位置,且链表不能使用二分查找,即o(n)。

          ps:可以考虑使用跳跃表来达到o(logn)的时间复杂度,但是其空间复杂度达到了o(n),也是可以接受的。  

          3.删除:和插入一样,需要先去找到要删除的元素,查询元素位置O(n)+删除操作O(1)=O(n)。
                

    2.无序链表

操作时间复杂度
查询O(n)
插入O(1)
删除O(n)+O(1)=O(n)

    分析

          1.查询:同有序链表查询,取最坏情况o(n)。

          2.插入:不需要考虑插入位置,即o(1)。

          3.删除:同有序链表一样,即查询元素位置O(n)+删除操作O(1)=O(n)。

 

PS:如有错误,还请各位老师不吝赐教!

  • 13
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
利用数据结构实现地铁网络最短路径的常见数据结构设计是使用图的表示和算法,其中最常用的是使用邻接表或邻接矩阵表示图,并结合Dijkstra算法或者A*算法来求解最短路径。 1. 邻接表表示图: - 空间复杂度分析:假设地铁网络有n个站点和m条边,邻接表的空间复杂度为O(n + m),其中n为站点数,m为边数。每个站点需要一个链表来存储与其相邻的站点,链表的长度为该站点的度数(即与其相邻的边数),因此总空间复杂度为O(n + m)。 2. 邻接矩阵表示图: - 空间复杂度分析:邻接矩阵的空间复杂度为O(n^2),其中n为站点数。邻接矩是一个二维数组,大小为n×n,用于表示站点之间的连接关系。每个元素表示两个站点之间是否有边,因此总空间复杂度为O(n^2)。 3. Dijkstra算法: - 空间复杂度分析:Dijkstra算法使用了一个优先队列(通常使用最小堆实现)来存储待处理的节点和其对应的最短路径长度。在最坏情况下,优先队列的大小可能达到n,因此空间复杂度为O(n)。 4. A*算法: - 空间复杂度分析:A*算法使用了一个优先队列来存储待处理的节点和其对应的估计最短路径长度。在最坏情况下,优先队列的大小可能达到n,因此空间复杂度为O(n)。 综上所述,利用数据结构实现地铁网络最短路径的空间复杂度主要取决于图的表示方式和算法的实现。邻接表和邻接矩阵表示图的空间复杂度分别为O(n + m)和O(n^2),而Dijkstra算法和A*算法的空间复杂度均为O(n)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值