- 博客(4)
- 收藏
- 关注
原创 线段树
结构:线段树是一个平衡的二元树,所有叶子到根的距离最多只差1。令整个区间的长度为N,则其有N个叶节点,每个叶节点代表一个单位区间,每个内部结点代表的区间为其两个儿子代表区间的联集。线段树的创作函数:root:当前线段树的根节点下标arr: 用来构造线段树的数组istart:数组的起始位置iend:数组的结束位置void build(int root, int arr[], int istart, int iend){if(istart == iend)//叶子节点segTree[root]
2021-01-25 18:14:40
109
原创 广搜与深搜
一般来说,广搜常用于找单一的最短路线,或者是规模小的路径搜索,它的特点是"搜到就是最优解", 而深搜用于找多个解或者是"步数已知(好比3步就必需达到前提)"的标题,它的空间效率高,然则找到的不必定是最优解,必需记实并完成全数搜索,故一般情况下,深搜需要很是高效的剪枝(优化).像搜索最短路径这些的很显著若是用广搜,因为广搜的特征就是一层一层往下搜的,保证当前搜到的都是最优解,当然,最短路径只是一方面的操作,像什么起码状态转换也是可以操作的。深搜就是优先搜索一棵子树,然后是另一棵,它和广搜对比,有着内存需要
2021-01-25 18:08:13
746
原创 二分
在有序表中高效查找元素的常用方法是二分查找,所谓二分即是折半,遵循分治的思想,每次将元序列划分成数量相等的两个子序列,然后查找,最终定位到目标元素。以下是代码(假设data序列按递增序排列):int binary_search(int data, int size, int value){int mid;int left = 0;int right = size - 1;while(left < right){mid = left + (right-left)/2;
2021-01-25 15:30:56
72
1
原创 并查集
并查集,从名字来看主要就是合并与查找,通常会有三种操作。分别是Union,Find,Count。比如,若某个元素 x 是否在集合 s1 中(Find操作),返回集合 s1 的代表元素即可。这样,判断两个元素是否在同一个集合中也是很方便的,只要看find(x) 和 find(y) 是否返回同一个代表即可。而对并查集而言,一个简单的应用就是判断无向图的连通分量个数,或者判断无向图中任何两个顶点是否连通。操作简介:1、Find:Find操作需要找到该子集合的代表元素,而代表元素是树根,因此需要保存树中结点
2021-01-21 16:48:19
109
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人