![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
heyZOJ
这个作者很懒,什么都没留下…
展开
-
二分查找
二分查找又称折半查找; 要求: 1.必须采用顺序存储结构; 2.必须按关键字大小有序排列; 优点:比较次数少,查找速度快,平均性能好;缺点:要求待查表为有序表,且插入删除困难;-二分查找算法就是不断将数组进行对半分割,每次拿中间元素和要查找的数进行比较;#include <iostream>using namespace std;//二分查找(非递归版本)int sea原创 2015-03-04 19:54:27 · 10110 阅读 · 0 评论 -
二分图
二分图: 二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i ∈ A, j ∈ B),则称图G为一个二分图。 二分图的判断染色法: 对未染过色的点染色,若相连的点为染色则将其染成相反的颜色,若相连的点已被染色则判断相连的点颜色是否相同,相同则原创 2015-05-10 12:14:10 · 2613 阅读 · 0 评论 -
字典树trie
又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于1.统计,2.排序,3.保存大量的字符串优点:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高 基本操作:插入查找删除如给出字符串”abc”,”ab”,”bd”,”dda”,根据该字符串序列构建一棵Trie树 例题:HDU 1671 Phone List 思路:边插入边查找是原创 2015-04-29 21:50:27 · 379 阅读 · 0 评论 -
判断线段相交模板
double max(double a, double b){ if (a > b) return a; return b;}double min(double a, double b){ if (a < b) return a; return b;}struct Point{ double x, y;};st原创 2015-04-11 23:17:39 · 657 阅读 · 0 评论 -
多边形面积
点积:a·b=(x1*x2 + y1*y2)=|a||b|·cosθ 点积的结果是一个数值; 叉积:a×b=(x1*y2 - x2*y1)=|a||b|·sinθ 叉积的结果也是一个向量,是垂直于向量a,b所形成的平面,如果看成三维坐标的话是在 z 轴上,上面结果是它的模。三角形的面积: 向量a和 向量b的叉积的绝对值表示 以 向量a和 向量b 为两边形成的平行四边形的面积.即:S=∣a×b原创 2015-04-11 01:17:51 · 419 阅读 · 0 评论 -
Dijstra算法
该算法要求图中不存在负权边;求单源点最短路径:定义一个dis数组来保存源点到其他点的最短距离,并通过松弛操作不断更新dis数组HDOJ2544 最短路 1.初始保存点的图void chushi(){ int i, j; for (i = 1; i <= n;i++) for (j = 1; j <= n; j++) { if (i == j)原创 2015-02-28 17:05:29 · 688 阅读 · 0 评论 -
Floyd算法
可以解决负权图,适用稠密图和顶点关系密切;HDOJ2544 最短路松弛操作:通过经过其他点来更新最短距离;其实Floyd就是不断通过松弛操作来更新最短距离,经过一个点更新任意两点间的最短距离,经过两个点更新任意两点间的最短距离,经过N个点更新任意两点间的最短距离;1.利用二维数组存图 先初始化数组再赋值for (i = 1; i <= n;i++) for (j = 1; j <=原创 2015-03-01 21:25:06 · 4181 阅读 · 0 评论 -
并查集
简述并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。 需要实现的操作有:合并两个集合,判断两个元素是否属于一个集合。 这里介绍的主要是普通的并查集,很多情况下使用的并查集是需要扩展的,根据使用情况的不同,有很多差别,这里仅仅是最基本的算法。复杂度T=O(n*α(n)) , 其中α(x),对于x=宇宙中原子数之和,α(x转载 2015-03-02 10:00:20 · 11636 阅读 · 0 评论 -
Bellmanford
适用条件&范围1.单源最短路径(从源点s到其它所有顶点v); 2.有向图&无向图; 3.边权可正可负(如有负权回路输出错误提示); 4.差分约束系统; -算法描述 - 1.初始化:将除源点外的所有顶点的最短距离估计值 d[v] =+∞, d[s] =0; - 2.松弛操作:反复对边集E中的每条边进行松弛操作,循环N-1次(N是点数); - 3..检验负权回路:判断原创 2015-03-04 20:47:47 · 419 阅读 · 0 评论 -
拓扑排序 Topological-sort
对一个有向无环图G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序的序列,简称拓扑序列。 拓扑排序算法主要是循环执行以下两步,直到不存在入度为0的顶点为止。 (1) 找到一个入度为0的顶点并输出之; (2) 从图中删除此原创 2015-03-23 17:36:54 · 1246 阅读 · 0 评论 -
Flood fill种子填充(DFS求连通快)
Flood fill算法是从一个区域中提取若干个连通的点与其他相邻区域区分开(或分别染成不同颜色)的经典算法。因为其思路类似洪水从一个区域扩散到所有能到达的区域而得名。算法分为四路算法(不考虑对角线方向的节点)和八路算法(考虑对角线方向的节点)。 例题:HDOJ 1241 Oil Deposits#include<cstdio>#include<cstring>int n, m;char m原创 2015-03-27 21:04:55 · 652 阅读 · 0 评论 -
最小生成树(Prime/kruskal)
构造最小生成树一般使用贪心策略,每次优先选择边权值最小的边 最小生成树的边数==点数-1 例子: HDOJ 1863 畅通工程 kruskal算法(用到并查集的知识):按边权值的大小从小到大排序,从边集中选取一条权值最小的边,若该边的两个顶点分属不同的树 ,则将其加入子图,也就是这两个顶点分别所在的 两棵树合成一棵树(通过并查集);反之,若该边的两个顶点已落在同一棵树上,则不可取原创 2015-03-24 21:52:28 · 3081 阅读 · 0 评论