线性结构:线性表(表、栈、队列、串等)
非线性结构:树(二叉树、Huffman树、二叉检索树等)、图(有向图、无向图等)
图 <- 树 <(严谨不成立)–二叉树 <- 线性表
二元组,有唯一的开始节点和终止节点,其余为内部节点。前驱关系和后驱关系具有反对称性和传递性。
对逻辑结构(K,r),其中$r \in R$
对节点集K建立从K到存储器M的单元的映射:K–>M。对于每个节点$j \in K$都对应一个唯一的连续存储区域$c \in M$。
四类:顺序、链接、索引、散列
定义了一组运算的数据结构
与物理存储结构无关
使软件建立在数据上(面向对象)
模块化的思想:软件复用、隐藏运算实现的细节和内部数据结构
抽象数据结构二元组<数据对象D,实际操作P>(类和方法?)
先定义逻辑结构,再定义运算
e.g.栈:线性表,操作特点是限制访问端口。
问题:一个函数,输入到输出的映射
特性:通用、有效、确定、有穷
基本分类:
穷举法 顺序找K值
回溯搜索 八皇后、树和图遍历
递归分治 二分法、快排、归并
贪心法 Huffman编码树、最短路Dijkstra算法、最小生成树Prim算法
动态规划 最短路Floyd算法
定义:对于正数c和n_0,任意的n>=n_0,有f(n) <= cg(n),则f(n)=O(g(n))。
单位时间:布尔运算和算术运算、简单I/O(指函数输入输出)、函数返回。
大O表示法:表达函数增长率上限,是函数最好情况的描述。上下限相同时可用$\Theta$表示法。
时空权衡。
定义:对于正数c和n_0,任意的n>=n_0,有f(n) >= cg(n),则f(n)=$\Omega$(g(n))。
n 足够大时,g(n)的f(n)的下界,函数增长率的下限,是函数最坏下限的描述。