《算法与数据结构考研试题精析》笔记(1) - 概论

基础概念以及性质

数据的最小单位是数据项

数据的基本单位是数据元素

数据对象:性质相同的元素的集合。

数据结构是带有结构数据元素的集合

在定义ADT时,除了数据对象和数据关系之外,还需说明基本操作

ADT,全称为“抽象数据类型”,是指一个数学模型以及定义在该模型上的一组操作。“抽象”的意义再与数据类型的数学抽象性。 ADT = (D, S, P). Data Structure = (D, S).

数据结构中,逻辑上可分为两类:线性结构非线性结构

数据的存储结构 = 数据的物理结构。它是数据结构在计算机中的表示。

数据的物理结构包括数据元素表示和数据元素间关系的表示。

多形数据类型:其值成分不确定的数据类型。

对于多型数据类型而言,不论其元素具有何种特性,元素之间的关系相同,基本操作也相同。从抽象数据类型的角度看,具有相同的数学抽象性,故称之为多形数据类型。

连续存储设计时,存储单元的地址一定连续。

有序表属于逻辑结构,顺序表、哈希表、单链表不属于逻辑结构。

逻辑结构,在清华的教材里面称为“结构”。 逻辑结构的四种类型,集合结构、线形结构、树状结构和网络结构。 下面摘自此博客: 当一个结构,如数组、链表、树、图,在逻辑结构中只有一种定义,而在物理结构中却有两种选择,那么这个结构就属于逻辑结构; 相反,当此结构在原有基础上加上了某种限定,使得其在物理结构中只有一种定义,那么这个结构就属于物理(存储)结构; 逻辑结构和存储结构的区别点在于:数据的逻辑结构是独立于在计算机中的存储结构的,数据的存储方式有多种不同的选择。例如栈是一种逻辑结构,它可以用顺序存储也可以用链式存储。 而数据结构是既可以描述逻辑结构又可以描述存储结构和数据运算,必须包含以上三种元素。所以像顺序表、哈希表、单链表都是数据结构。

【错误说法】每种数据结构都应具备三种基本运算:插入、删除和查找。

反例一:多维数组,就没有插入和删除。 反例二:栈和队列,一般不需要查找(严格来说,是不能查找的,因为逻辑上其访问点被严格限制在线性表的端点)

数据的逻辑结构:数据的数据元素之间的逻辑关系

数据结构的概念包括:数据之间的逻辑结构、数据在计算机中的存储方式、数据的运算

数据结构的抽象操作的定义与具体实现无关。

在顺序存储结构中,任何时候都不会存储数据结构中元素之间的关系。

链式存储结构中,就会存储数据结构中数据元素元素之间的关系。

算法的优劣,与算法描述语言、具体的计算机都无关。(换一种说法可为“独立于…”)

哈夫曼树、平衡二叉树都是数据的逻辑结构。(属于树形结构)

一个数据结构在计算机中的映像(表示)称为存储结构。

数据的逻辑结构指的是数据的组织形式,即数据元素之间逻辑关系的总体,而逻辑关系是数据元素之间的关联方式(或称“邻接关系”)

数据结构结构是研讨数据的数据的逻辑结构物理结构(存储结构),以及他们之间的相互关系,并对与这种结构定义相应的操作(运算),设计出相应的算法

抽象数据类型的定义仅取决于它的一组逻辑特性,而与在计算机内如何表示和实现无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部使用。

【问题】todo:是否在log_m{n}在考试的时候都写成log_2{n}?[北京工业大学2005、二、1]

上述两者有如下关系:关系,他们只相差一个常数。所以等规模。

算法

算法的时间复杂度取决于问题的规模待处理数据的初态

算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作;此外算法还具有下列5个重要特性:

  1. 有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都可在有穷时间内完成。
  2. 确定性(也可以叫做"无二义性"):算法每一条指令必须有确切含义;在任何情况下,算法只有唯一一条执行路径,即对于相同的输入只能得出相同的输出;
  3. 可行性:所有操作可以通过已经实现的基本运算执行有限次来实现;
  4. 零个或多个的输入
  5. 一个或多个的输出

“好”的算法应考虑以下目标:

  1. 正确性
  2. 可读性
  3. 健壮性
  4. 效率与低存储量需求

时空复杂度

在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2^n)的算法。

上句话是正确的,原因转自此网站,如下: 此句中是指算法的时间复杂度,不要想当然认为是程序(该算法的实现)的具体执行时间,而赋予n—个特殊的值。时间复杂度为O(n)的算法,必然总是优于时间复杂度为O(2n)的算法。

下面算法的时间复杂度为O(n^0.5).

int suanfa3(int n) {
  int i = 1, s = 1;
  while (s < n) s += ++i;
  return i;
}

s的大小变化:1->3->6->10->… 表达式为operation.s

汉诺塔递归中,假设碟子的个数为n,则时间复杂度为O(2^n).

Tips

关于(D, S)

D为Data,S为Structure,D为数据元素的有限集,S为D上关系的有限集。Data意为数据,Structure意为结构。在数据结构中结构的定义如下:数据元素相互之间的关系称为结构。故而S具体代表着什么也就不奇怪了。

(D, S, P)在不同的教材里面,可能会使用不同的字母表示。比如西南交通大学中,为(D, R, P).