数据结构01 - 基础概念

数据结构学科:研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等;

程序设计 = 数据结构 + 算法

数据:描述客观事物的符号;数据可以输入到计算机中进行处理;图像,音频等数据可以通过编码转换为字符数据;

数据元素:组成数据的,有一定意义的基本单位,也叫记录;计算机将数据元素当做一个整体进行处理;

数据项:一个数据元素由若干个数据项组成;数据项是数据不可分割的最小单位;

结构:不同的数据元素之间不是相互独立的,而是存在特定的关系,这种关系称为结构;

数据结构:相互之间存在一种或多种特定关系的数据元素的集合;

  • 逻辑结构:数据对象中数据元素之间的关系;几何结构,线性结构,树形结构,图形结构;
  • 物理结构/存储结构:数据的逻辑结构在计算机中的存储形式;

存储结构:

  • 顺序存储结构:把数据元素存放在地址连续的存储单元里,数据的逻辑关系与物理关系一致;
  • 链式存储结构:把数据元素存放在任意的存储单元里,该组存储单元可以连续,也可以不连续;

算法:解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,每条指令表示一个或多个操作;

算法特征:

  • 输入输出:有零个或多个输入,至少有一个或多个输出;
  • 有穷性:算法在执行有限的步骤之后自动结束而不会出现无限循环,且每个步骤在可接受的时间内完成;
  • 确定性:算法的每个步骤都具有明确的含义,不会出现二义性;
  • 可行性:算法的每一步都必须是可行的;

算法设计的要求:

  • 正确性:算法至少应该具有输入输出和加工处理无歧义性,能正确反映问题的需求,能得到问题的正确答案;
  • 可读性:便于阅读,理解和交流;
  • 健壮性:输入不合法时,算法也能做出相关处理,而不会产生异常或莫名其妙的结果;
  • 时间效率高,存储量低

算法效率的度量:

  • 事后统计方法;
  • 事前分析估算;

函数的渐进增长:
给定2个函数f(n)和g(n),如果存在一个整数N,使得对于所有的n > N,f(n)总是比g(n)大,则认为f(n)的渐近增长快于g(n);

判断一个算法的效率时,函数中的常数和其他次要项可以忽略,而更应该关注主项(最高阶项)的阶数;

算法时间复杂度:
进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级;
T(n) = O(f(n)),表示随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度;f(n)是问题规模n的某个函数;

分析算法的时间复杂度,关键是分析循环结构的运行情况
一般说算法的时间复杂度是指最坏时间复杂度,而不是平均时间复杂度;

推导大O阶:

  1. 用常数1取代运行时间中的所有加法常数;
  2. 在修改后的运行次数函数中,只保留最高阶项;
  3. 如果最高阶项存在且不是1,则去除与这个项相乘的常数;

常见的时间复杂度:
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

猜你喜欢

转载自blog.csdn.net/NotSoSerious/article/details/81359457