一、绪论
1. 从问题到程序
需求模型 - 数学模型 - 实现模型
2. 数据结构
逻辑结构:定义了数学模型中基本元素和元素之间的相互关系。可以用二元组B = <K, R>表示,K为结点的有穷集合,R为K上的一个关系。
存储结构:给出了数学模型的具体表现方式,包括结点的表示和关系的表示。
3. 按逻辑结构分类
集合结构:R为空,即K内无任何关系。
线性结构:K中每个节点最多有一个前驱和一个后继。如线性表、串、栈、队列。
树形结构:K中每个节点最多有一个前驱和多个后继。如树。
复杂结构:对前驱后继个数不做限制。如图、网络。
集合结构 包含于 线性结构 包含于 树形结构 包含于 复杂结构。
4. 按存储结构分类
顺序表示:线性结构,适合批量操作,当结点等长时,适合随机存取。
链接表示:适合插入、删除等操作。
散列表示:名字表、字典,适合随机存取,不适合批量操作
索引表示:特殊的散列,散列是通过散列函数,索引是建立辅助的索引结构。将不等长的数据结构转化为等长的数据结构。
5. 算法的设计
贪心法:找局部最优解,推广到全局最优解。
分治法:把一个规模较大的问题拆分成两个或多个规模较小且与原问题相似的子问题。自顶向下。
动态规划法:分解的子问题较多,重用已有的计算结果。自底向上。
回溯法:深度搜索。迷宫问题,八皇后问题。
分支限界法:广度优先。在人工智能中使用广泛。
6. 算法的特性