• 最短路

    从某顶点出发,沿图的边到达另一顶点所经过的路径中,各边上权值之和最小的一条路径叫做最短路径。 最短路算法根据应用场景,可选用Dijkstra算法、spfa算法和Floyd算法 1.Dijkstra 算法:算法是一种基于贪心的单源最短路算法,有朴素与堆优化两种 证明:first–朴素:应用场景: 用于稠密图,时间复杂度,稠密图中用堆优化版本效率较低,不宜使用 Code:123456789101...
  • Splay

    简介:Splay树 或 伸展树,是一种平衡二叉查找树,它通过 Splay操作 ,每操作一个节点,就将该节点旋转 (双旋) 至根节点 ( 这样既可以保证其时间复杂度,又可以保证其维护值的正确性 ) ,使得整棵树在仍然满足二叉查找树性质的同时,可以使树保持平衡,高度接近,从而使其能够在均摊 时间内完成插入、查找和删除操作。 这种方法避免了普通二叉查找树在数据为单调上升序列时退化为链的问题,有效...
  • 树状数组

    推导:已知一个数为 设其二进制表示为: 其中有 所以这个数可以划分为以下几个区间:我们已知以下条件: 表示二进制表示的最后一位 表示二进制表示的倒数第二位,以此类推 所以对于以上区间中的任意区间,都有长度一定是的二进制表示的最后一位所对应的次幂 所以 即 例子:的二进制表示为 所以的二进制表示为 根据前面的划分原则,可以划分为 图解:此为以每一个数为时的区间 基本操作:1.add(...
  • 线段树

    要素:线段树的定义一般用结构体定义 1234struct Node{ int l,r; // 左右儿子 int // 需要维护的量}tr[N*4]; 基本操作:1.build(u , l , r)建立一棵线段树 通用代码:12345678910void build(int u,int l,int r){ tr[u]={···};// 加入点元素 if(l == r) ...
  • C++后缀表达式

    引进概念中缀表达式:即一般的表达式 eg. a+b*c/d*(e-f) 后缀表达式:即将中缀表达式中的运算符置于操作的数字后 eg. abc*d/ef-*+ 中缀表达式–>后缀表达式运用一个栈,一个队列,分别用来 临时 存放运算符和存放 后缀表达式 ,分别记为和。 从左到右遍历字符串 取到数字则直接加入队列中 取到运算符的情况如下: 若栈为空,则直接放入队列 若取到字符...
12