<大话数据结构> 第1、2章笔记

1 数据 ->数据结构

数据(操作对象):描述客观事物的符号,能被计算机识别,并输入给计算机处理的符号集合

  • 数据元素(建立数据结构的着眼点):组成数据的、有一定意义的基本单位
  • 数据项:不可分割的最小单位
  • 数据对象:性质相同的数据元素的集合,是数据的子集

数据结构:相互之间存在一种或多种特定关系的数据元素的集合
目的是分析待处理对象的特性以及各处理对象之间存在的关系

  • 逻辑结构:数据对象中数据元素之间的相互关系(集合、线性、树形、图形)->面向问题
  • 物理结构:数据存储形式(顺序、链式)->面向计算机,将数据及其逻辑关系存储到计算机

数据类型:一组性质相同的值的集合,以及在此集合上的一些操作的总称
抽象数据类型(ADT):一个数学模型以及定义在该模型上的一组操作

  • 目的:问题分解、抽象、信息隐藏
  • 组成:包括数据对象、数据对象中各数据元素之间关系、对数据元素的操作

2 算法

2.1 算法

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

算法特点:

  • 输入输出
  • 有穷性(有限步骤、可接受时间)
  • 确定性
  • 可行性

算法设计要求:

  • 正确性:四个层次
    • 没有语法错误
    • 对于合法输入能够产生满足要求的输出结果
    • 对于非法输入能够得出满足规格说明的结果
    • 对于精心挑选的所有测试数据都有满足要求的输出结果
  • 可读性
  • 健壮性:对输入数据不合法的情况作合适的处理
  • 时间效率高和存储量低

2.2 算法效率

度量:事前分析估算方法

效率影响因素:

  • 算法采用的策略和方法
  • 编译产生的代码质量(软件)
  • 问题的输入规模
  • 机器执行指令的速度(硬件)

主要因素就是算法的好坏输入规模的大小
分析算法效率的基本思路即将算法基本操作的数量(一系列步骤执行的次数)表示成输入规模n的函数,而且函数的常数项和其他次要项都可以忽略,更应该关注主项的阶数。
由此,引出算法时间复杂度的概念。
时间复杂度:

语句执行次数T(n)是关于问题规模n的函数,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数,记作T(n)=O(f(n)),它称为算法的渐进时间复杂度,简称时间复杂度。

推导大O阶:

推导大O阶,我们可以按照如下的规则来进行推导,得到的结果就是大O表示法:
1. 用常数1来取代运行时间中所有加法常数。
2. 修改后的运行次数函数中,只保留最高阶项
3. 如果最高阶项存在且不是1,则去除与这个项相乘的常

常用的时间复杂度按照耗费的时间从小到大依次是:

O(1)<O(logn)<O(n)<O(nlogn)<O(n²)<O(n³)<O(2ⁿ)<O(n!)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章