数据结构(绪论)

  • 算法+数据结构=程序
  • 数据结构是一门研究非数值计算程序设计中的操作对象,以及这些对象之间的关系和操作的学科。

基本概念和术语

  • 数据(Data)是客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称。
  • 数据元素(Data Element)是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。(有些情况下,数据元素也称为元素、记录等。)
  • 数据项(Data Item)是组成数据元素的、有独立含义的、不可分割的最小单位。
  • 数据对象(Data Object)是性质相同的数据元素的集合,是数据的一个子集。无论数据元素集合是无限集或是有限集,还是有多个数据项组成的复合数据元素的集合,只要集合内元素的性质均相同,都可称之为一个数据对象。

数据结构

  • 数据结构(Data Structure)是相互之间存在一种或多种特定关系的数据元素的集合。
  • 数据结构包括逻辑结构和存储结构两个层次。

逻辑结构

  • 逻辑结构是从具体问题抽象出来的数学模型,从逻辑关系上描述数据,它与数据的存储无关。
  • 数据的逻辑结构有两个因素:一是数据元素;二是关系。
  • 根据数据元素之间关系的不同特性,通常有四类基本逻辑结构结构。
  1. 集合结构(“属于同一集合”’)
  2. 线性结构(“一对一”)
  3. 树结构(“一对多”)
  4. 图结构或网状结构(“多对多”)

数据结构(绪论)_第1张图片

其中集合结构、树结构和图结构都属于非线性结构。

线性结构包括线性表、栈和队列、字符串、数组、广义表。非线性结构包括树和二叉树、有向图和无向图。

数据结构(绪论)_第2张图片

存储结构

  • 数据对象在计算机中有两种基本的存储结构,分别是顺序存储结构和链式存储结构

数据类型是一个值的集合和定义在这个值集上的一组操作的总称。

抽象数据类型是指由用户定义的、表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称,具体包括三部分:数据对象、数据对象上关系的集合,以及对数据对象的基本操作的集合。基本操作有两种参数:赋值参数只为操作提供输入值;引用参数以“&”打头,除可提供输入值外,还将返回操作结果。

数据结构(绪论)_第3张图片

数据结构(绪论)_第4张图片

算法

  • 算法是为了解决某类问题而规定的一个有限长的操作序列。
  • 算法具有五个特性:有穷性、确定性、可行性、输入和输出。
  • 一个算法的优劣应该从以下四方面来评价:正确性、可读性、健壮性和高效性。(高效性包括时间和空间两个方面。时间复杂度和空间复杂度是衡量算法的两个主要指标。)

算法的时间复杂度

  • 衡量算法效率的方法主要有两类:事后统计法和事前分析估算法。鉴于第一种的缺陷,所以通常采用事前分析估计法,通过计算算法的渐进复杂度来衡量算法的效率。
  • 问题规模是算法求解问题输入量的多少,是问题大小的本质表示,一般用整数n表示。
  • 一个算法的执行时间大致上等于其所有语句执行时间的总和,而语句的执行时间则为该条件语句的重复次数和执行一次所需时间的乘积。一条语句的重复执行次数称为语句频度
  • 一般情况下,算法中基本语句重复执行次数是问题规模n的某个函数f(n),算法的时间量度记作T(n)=O(f(n)),它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称时间复杂度

数据结构(绪论)_第5张图片

数据结构(绪论)_第6张图片

  • 常见的时间复杂度按数量级递增排列依次为:常量阶O(1)、对数阶O(log2 (n))、线性阶O(n)、线性对数阶O(nlog2 (n))、平方阶O(n……2)、立方阶O(n……3)、k次方阶O(n……k)、指数阶O(2……n)等。

数据结构(绪论)_第7张图片

  • 随着n的增大,T(n)的增长较慢的算法为较优的算法。时间复杂度为指数阶O(2……n)的算法效率较低,当n值稍大时就无法应用。应该尽可能选择使用多项式阶O(n……k)的算法,而避免使用指数阶的算法。
  • 最好时间复杂度,是算法计算量可能达到的最小值;最坏时间复杂度,算法计算量可能达到的最大值;平均时间复杂度,算法计算量的加权平均值。
  • 通常只讨论算法在最坏情况下的时间复杂度,即分析在最坏的情况下,算法执行时间的上界。

算法的空间复杂度

  • 关于算法的存储空间需求,类似于算法的时间复杂度,我们采用渐进空间复杂度作为算法所需存储空间的量度,简称为空间复杂度,它也是问题规模n的函数,记作:S(n)=O(f(n))。

对于一个算法,其时间复杂度和空间复杂度往往是相互影响的,有得必有失。鉴于运算空间较为充足,人们都以算法的时间复杂度作为算法优劣的衡量指标。

你可能感兴趣的:(数据结构(绪论))