数据结构与算法之数组操作

举例理解

我们可以这样理解数组:一连串的数据。在不同语言环境中叫法和特性不同,在python中称为list, 不要求相同类型, 在c++中要求相同类型。数组根据维度划分可分为一位数组和多维数组, 一般而言,一维和二维数组较常见, 多维数组通常出现在动态规划中, 在深度学习中的张量tensor本身是多维数组

常用操作 简单举例

  1. 遍历

    伪代码举例:

    for i in range(n):
        for  j in range(m):
            array[i][j] = t
    
  2. 索引

    通过下标访问具体数据

    伪代码

    lst_of_random_things = [1, 3.4, 'a string', True]
    print(lst_of_random_things[0]) # 1
    
  3. 动态数组的实现

    目标:实现最后一个插入、最后一个删除、大小、索引 插入、删除、获取大小、索引

    方式:假定一个数组长度为10

    1. 数组长度增加1 再插入元素
    2. 数组长度扩大一倍 再插入元素

    分析选哪种?

    1. 如果我们每次插入一个元素的话,都要申请一个长度为n的数组,插入n个元素的时候就是:
      f(n) = 1 + 2 + 3 + … + n 每一次循环都是n, n个数,循环n次 O(n^2) 的级别

    2. 如果每一次都扩展一倍,假设最后一次数组长度为n, 那么上一次是 n / 2, 再上一次是 n / 4
      f(n) = n + n/2 + n/4 + n/8 + … <= 2n 最终是 O(n) 的级别

    这就是常说的用空间换时间的方式

    备用属性或函数

    push_back
    pop_back
    index
    size
    

    如何实现?
    push_back : 检查size是否满, 如果满, allsize倍增, a 倍增, 然后插入一个元素
    pop_back : 删除最后元素, size - 1
    index : 返回 a 的相应位置元素
    size : 返回 size

发布了370 篇原创文章 · 获赞 169 · 访问量 66万+

猜你喜欢

转载自blog.csdn.net/Tyro_java/article/details/99759428
今日推荐