zoukankan      html  css  js  c++  java
  • 基础数据结构:数组

    基础数据结构:数组

    数组 是一个含有数据的列表。 索引 来标识每项数据在数组中的位置。

    若想了解某个数据结构(例如数组)的性能,得分析程序怎样操作这一数据结构。 一般数据结构都有以下4种操作(或者说用法)。

    •读取:查看数据结构中某一位置上的数据。对于数组来说,这意味着查看某个索引所指的数据值。例如,查看索引2上有什么食品,就是一种读取。

    •查找:从数据结构中找出某个数据值的所在。对于数组来说,这意味着检查其是否包含某个值,如果包含,那么还得给出其索引。例如,检查"dates"是否存在于食品清单之中,给出其对应的索引,就是一种查找。

    •插入:给数据结构增加一个数据值。对于数组来说,这意味着多加一个格子并填入一个值。例如,往购物清单中多加一项"figs",就是一种插入。

    •删除:从数据结构中移走一个数据值。对于数组来说,这意味着把数组中的某个数据项移走。例如,把购物清单中的"bananas"移走,就是一种删除。

    操作的速度,并不按时间计算,而是按步数计算。 此外,操作的速度,也常被称为时间复杂度

    读取

    读取,即查看数组中某个索引所指的数据值。

    这只要一步就够了,因为计算机本身就有跳到任一索引位置的能力。

    所以,数组的读取是一种非常高效的操作,因为它只要一步就好。一步自然也是最快的速度。这种一步读取任意索引的能力,也是数组好用的原因之一。

    O(1)

    查找

    查找就是检查它是否包含某个值,如果包含,还得给出其索引。

    逐个格子去检查的做法,就是最基本的查找方法——线性查找。

    一个N格的数组,其线性查找的最多步数是N(N可以是任何自然数)。

    O(N)

    插入

    往数组里插入一个新元素的速度,取决于你想把它插入到哪个位置上。

    假设要在的末尾插入。那么只需一步。因为计算机知道数组开头的内存地址,也知道数组包含多少个元素,所以可以算出要插入的内存地址,然后一步跳到那里插入就行了。

    但在数组开头或中间插入,就另当别论了。这种情况下,我们需要移动其他元素以腾出空间,于是得花费额外的步数。 最低效(花费最多步数)的插入是插入在数组开头。因为这时候需要把数组所有的元素都往右移。 一个含有N个元素的数组,其插入数据的最坏情况会花费N+1步。即插入在数组开头,导致N次移动,加上一次插入。

    O(N)

    删除

    数组的删除就是消掉其某个索引上的数据。

    跟插入一样,删除的最坏情况就是删掉数组的第一个元素。因为数组不允许空元素,当索引0空出,那么剩下的所有元素都要往左移去填空。 对于含有N个元素的数组,删除操作最多需要N步。

    O(N)

    参考:数据结构与算法图解.1

  • 相关阅读:
    Kinect 开发 —— 硬件设备解剖
    Kinect 开发 —— 引言
    (转)OpenCV 基本知识框架
    OpenCV —— 摄像机模型与标定
    OpenCV —— 跟踪与运动
    OpenCV —— 图像局部与分割(二)
    OpenCV —— 图像局部与部分分割(一)
    OpenCV —— 轮廓
    OpenCV —— 直方图与匹配
    OpenCV —— 图像变换
  • 原文地址:https://www.cnblogs.com/ooo0/p/12162034.html
Copyright © 2011-2022 走看看