摘要: ## 例 1:如何在书架上摆放图书? 图书的摆放要使得2个相关操作方便实现: - 操作1:新书怎么插入? - 操作2:怎么找到某本指定的书? - 方法1:随便放 - 插入:很方便 - 查找:效率极低 - 方法2:按照书名的拼音字母顺序排放 - 插入:二分查找确定位置后插入,书多了之后插入会很困难 - 阅读全文
posted @ 2023-06-21 16:24 流星<。)#)))≦ 阅读(0) 评论(0) 推荐(0) 编辑
摘要: ## 定义 算法(Algorithm) - 一个有限指令集 - 接受一些输入(有些情况下不需要输入) - 产生输出 - 一定在有限步骤之后终止 - 每一条指令必须 - 有充分明确的目标,不可以有歧义 - 计算机能处理的范围之内 - 描述应不依赖于任何一种计算机语言以及具体的实现手段 ## 什么是好的 阅读全文
posted @ 2023-06-21 16:24 流星<。)#)))≦ 阅读(4) 评论(0) 推荐(0) 编辑
摘要: ## 最大子列和问题 给定N个整数的序列 ${ A_1, A_2, …, A_N}$ ,求函数 $f(i,j)=max\{0,\sum_{k=i}^jA_k\}$ 的最大值。 ## 算法1:直接法 ```java int MaxSubseqSum1(int A[], int N) { int Thi 阅读全文
posted @ 2023-06-21 16:24 流星<。)#)))≦ 阅读(2) 评论(0) 推荐(0) 编辑
摘要: ## ## 数组 数组是最基本的构造类型,它是一组相同类型数据的有序集合。数组中的元素在内存中连续存放,用数组名和下标可以唯一地确定数组元素。 ## 链表 链表是一种重要的基础数据结构,也是实现 **复杂数据结构** 的重要手段。它不按照线性的顺序存储数据,而是由若干个同一结构类型的“结点”依次串接 阅读全文
posted @ 2023-06-21 16:24 流星<。)#)))≦ 阅读(3) 评论(0) 推荐(0) 编辑
摘要: ## 如何表示多项式? $$ f(x)=a_0+a_1x+...+a_{n-1}x^{n-1}+a_nx^n $$ ### 方法1:顺序存储结构直接表示 $a[i]$ :项 $x^i$ 的系数 $a_i$ 例如: $$ f (x) =4x^5-3x^2+1 $$ | 下标i | 0 | 1 | 2 阅读全文
posted @ 2023-06-21 16:24 流星<。)#)))≦ 阅读(2) 评论(0) 推荐(0) 编辑
摘要: ## 引题 计算机如何进行表达式求值? 中缀表达式:运算符号位于两个运算数之间。如 ,a+b*c-d/e **后缀表达式**:运算符号位于两个运算数之后。如, abc*+de/- ## 堆栈的抽象数据类型描述 堆栈(Stack):具有一定操作约束的线性表(只在一端(栈顶,Top)做 插入、删除) - 阅读全文
posted @ 2023-06-21 16:24 流星<。)#)))≦ 阅读(3) 评论(0) 推荐(0) 编辑
摘要: ## 简介 队列(Queue):具有一定操作约束的线性表 插入和删除操作:只能在一端插入,而在另一端删除。 - 数据插入:入队列(AddQ) - 数据删除:出队列(DeleteQ) - 先来先服务 - 先进先出:FIFO ## 队列的抽象数据类型描述 类型名称:队列(Queue) 数据对象集:一个有 阅读全文
posted @ 2023-06-21 16:24 流星<。)#)))≦ 阅读(1) 评论(0) 推荐(0) 编辑
摘要: ## 树的定义 树(Tree): n(n≥0)个结点构成的有限集合。 当n=0时,称为空树; 对于任一棵非空树(n> 0),它具备以下性质: - 树中有一个称为“根(Root)”的特殊结点,用 r 表示; - 其余结点可分为m(m>0)个互不相交的有限集T1,T2,... ,Tm,其中每个集合本身又 阅读全文
posted @ 2023-06-21 16:24 流星<。)#)))≦ 阅读(0) 评论(0) 推荐(0) 编辑
摘要: ## 二叉树的定义 二叉树T:一个有穷的结点集合。 - 这个集合可以为空 - 若不为空,则它是由根结点和称为其左子树TL和右子树TR的两个不相交的二叉树组成。 二叉树具体五种基本形态: - 空二叉树; - 只有根结点的二叉树; - 只有根结点和左子树TL的二叉树; - 只有根结点和右子树TR的二叉树 阅读全文
posted @ 2023-06-21 16:24 流星<。)#)))≦ 阅读(1) 评论(0) 推荐(0) 编辑
摘要: ## 先序、中序、后序遍历 | 遍历方式 | 描述 | | | | | 先序遍历 | 1. 访问根结点; 2. 遍历其左子树; 3. 遍历其右子树。 | | 中序遍历 | 1. 遍历其左子树; 2. 访问根结点; 3. 遍历其右子树。 | | 后序遍历 | 1. 遍历其右子树;; 2. 访问根结点; 阅读全文
posted @ 2023-06-21 16:24 流星<。)#)))≦ 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 二叉搜索树(BST,Binary Search Tree),也称二叉排序树或二叉查找树 二叉搜索树:一棵二叉树,可以为空;如果不为空,满足以下性质: 1. 非空左子树的所有键值小于其根结点的键值 2. 非空右子树的所有键值大于其根结点的键值 3. 左、右子树都是二叉搜索树(递归定义) 二叉搜索树操作 阅读全文
posted @ 2023-06-21 16:24 流星<。)#)))≦ 阅读(2) 评论(0) 推荐(0) 编辑
摘要: ## 概念 “平衡因子(Balance Factor,简称BF): BF(T) = hL-hR, 其中hL和hR分别为T的左、右子树的高度。 平衡二叉树(Balanced Binary Tree)(AVL树) :空树,或者 任一结点左、右子树高度差的绝对值不超过1,即|BF(T) |≤ 1 **给定 阅读全文
posted @ 2023-06-21 16:24 流星<。)#)))≦ 阅读(1) 评论(0) 推荐(0) 编辑
摘要: ## 概念 优先队列(Priority Queue):特殊的“队列”,取出元素的顺序是依照元素的优先权(关键字)大小,而不是元素进入队列的先后顺序。 问题:如何组织优先队列? - 一般的数组、链表? - 有序的数组或者链表? - 二叉搜索树? AVL树? **堆的两个特性** - 结构性:**用数组 阅读全文
posted @ 2023-06-21 16:24 流星<。)#)))≦ 阅读(0) 评论(0) 推荐(0) 编辑
摘要: ## 概念 哈夫曼树(Huffman Tree) [参考之前整理的笔记](https://www.cnblogs.com/huangwenjie/p/13660756.html#autoid-h2-1-3-0) 解决的问题:如何根据结点不同的查找频率构造更有效的搜索树? 带权路径长度(WPL):设二 阅读全文
posted @ 2023-06-21 16:24 流星<。)#)))≦ 阅读(8) 评论(0) 推荐(0) 编辑
摘要: ## 集合的表示 - 集合运算:交、并、补、差、判定一个元素是否属于某一集合 - 并查集:集合 **并、查** 某元素属于什么集合 - 并查集问题中集合存储如何实现? - 可以用树结构表示集合,树的每个结点代表一个集合元素 ## 集合运算 - 采用数组存储形式 - 双亲表示法:孩子指向双亲 - 负数 阅读全文
posted @ 2023-06-21 16:23 流星<。)#)))≦ 阅读(1) 评论(0) 推荐(0) 编辑
摘要: ## 什么是“图” (Graph) - 表示“多对多”的关系 - 包含 - 一组顶点:通常用 V (Vertex) 表示顶点集合 - 一组边:通常用 E (Edge) 表示边的集合 - 边是顶点对:(v, w) ∈ E ,其中 v, w ∈ V - 有向边 表示从v指向w的边(单行线) - 不考虑重 阅读全文
posted @ 2023-06-21 16:23 流星<。)#)))≦ 阅读(1) 评论(0) 推荐(0) 编辑
摘要: ## 深度优先搜索(Depth First Search, DFS) ```c void DFS ( Vertex V ) { visited[ V ] = true; for ( V 的每个邻接点 W ) if ( !visited[ W ] ) DFS( W ); } ``` 若有N个顶点、E条 阅读全文
posted @ 2023-06-21 16:23 流星<。)#)))≦ 阅读(0) 评论(0) 推荐(0) 编辑
摘要: ## 最短路径问题的抽象 - 在网络中,求两个不同顶点之间的所有路径中,边的权值之和最小的那一条路径 - 这条路径就是两点之间的最短路径(Shortest Path) - 第一个顶点为源点(Source) - 最后一个顶点为终点(Destination) 问题分类: - 单源最短路径问题:从某固定源 阅读全文
posted @ 2023-06-21 16:23 流星<。)#)))≦ 阅读(13) 评论(0) 推荐(0) 编辑
摘要: ## 概念 - 最小生成树(Minimum Spanning Tree) - 最小生成树存在 ↔ 图连通 - 是一棵树 - 无回路 - |V|个顶点一定有|V|-1条边 - 向生成树中任加一条边都一定构成回路 - 是生成树 - 包含全部顶点 - |V|-1条边都在图里 - 边的权重和最小 ## 贪心 阅读全文
posted @ 2023-06-21 16:23 流星<。)#)))≦ 阅读(2) 评论(0) 推荐(0) 编辑
摘要: ## 概念 - 拓扑序:如果图中从V到W有一条有向路径,则V一定排在W之前。满足此条件的顶点序列称为一个拓扑序 - 获得一个拓扑序的过程就是拓扑排序 - AOV (Activity On Vertex) 如果有合理的拓扑序,则必定是 **有向无环图**(Directed Acyclic Graph, 阅读全文
posted @ 2023-06-21 16:23 流星<。)#)))≦ 阅读(1) 评论(0) 推荐(0) 编辑