随笔分类 - 复习笔记
摘要:适用 含负权边的有向图的单源最短路径问题 不能处理带负权边的无向图和包含权值总和为负值的回路 数据结构 dist[u] :源点到u的最短路径长度 思路 每次更新dist数组,使得 dist[u] 的含义是从源点到u的经过n条边的最短路径长度 递推公式 $Dist^k[u]=min(dist^{k-1
阅读全文
摘要:数据结构 dfn[i] :编号为i的结点在dfs遍历图的过程中的访问序号(开始时间) low[i] :从i结点出发dfs过程中i下方的结点能到达的最早的当前搜索路径上的结点的开始时间。(初始时 low[i]=dfn[i] ) 操作 遍历结点没被访问过的就开始dfs,碰到哪个结点哪个结点就入栈,栈中结
阅读全文
摘要:Trie树(字典树) 树中任一结点p都对应于一个字符串S,S由从根出发走到p所经过的边上的字符构成 数据结构 操作 插入串 (复杂度为模式串长度) Trie图(AC自动机) 可以由Trie树为基础构造 终止节点:每个模式串最后一个结点 危险结点:终止节点和前缀指向危险结点的结点。 包含前缀指针(ne
阅读全文
摘要:每个非叶结点所表示的结点$[a,b]$,左儿子表示区间$[a,\frac{a+b}{2}]$,右儿子表示的区间为$[\frac{a+b}{2}+1,b]$ 叶子结点表示区间长度为1 数据结构 用一维数组存放线段树(idx)时,数组开到4n大可以确保不越界。 操作 区间分解 从根节点开始递归进行区间分
阅读全文
摘要:适用于单个元素经常修改,反复求不同区间和的情况。 函数 求和:$sum(k)=C[n_1]+C[n_2]+…+C[n_m]$ $n_m=k, n_{i-1}=n_i-lowbit(n_i)$ $a[i]+….+a[j]=sum(j)-sum(i)$ 更新: $a[i]$更新,有且只有$C[n_1],
阅读全文
摘要:主要函数 Merge :合并两个并查集 GetRoot :查询某个元素在哪个集合 Query :查询两个元素是否属于同一集合 数据结构 parent[i]=j :j是i的父节点 Code
阅读全文
摘要:性能用ASL(查找成功时的平均查找长度)来衡量 线性表检索 顺序检索 逐个比较 优点:插入元素可以直接加在表尾 缺点:检索时间太长 二分检索法 条件:序列必须有序 实现: 1 template <class Type> int BinSearch (vector<Item<Type>*>& data
阅读全文
摘要:主要目的是减少访存次数 外排序基本过程: 置换选择排序(把外存文件初始化为尽可能长的顺串集) 归并排序(把顺串合并排序) 置换选择算法 用一个堆来维护 主要步骤:每个顺串至少长为M,平均长度2M 读取M个记录到堆中,建立最小堆,设置堆尾标志LAST 把根节点输出 读入下一条记录,如果比刚刚输出的根节
阅读全文
摘要:简单的排序-复杂度高 插入排序-稳定 思想:序列分为已排序和未排序两部分,未排序的一个个向前插入到已排序的序列中 复杂度:$O(n^2)$ 当n较小的时候,插入排序较为高效 优化:不用每次比较都交换 再优化:二分查找 比较次数降为$O(nlog^n)$,移动次数不变,最佳情况时间代价降低,但最差和平
阅读全文
摘要:两种表示方式 邻接矩阵 邻接表 无向图 $|V|+2|E|$存储空间 有向图 出边表入边表之一 $|V|+|E|$ 十字链表 data域 firstinarc指针指向第一条以该顶点为终点的边 firstoutarc指针指向第一条以该顶点为起点的边 邻接矩阵 邻接表 无向图 $|V|+2|E|$存储空
阅读全文