
算法学习
BrightHao_zi
天道酬勤
展开
-
素数筛
保研机试里看起来素数用的还是很频繁的,这里总结学习一下最简单常用的三种筛法洛谷P3912 求1-n个数中素数个数1.判断一个数是否为素数 复杂度O(n)O(\sqrt{n})O(n)bool is_prime(int n){ for(int i=1;i*i<=n;i++){ if(n%i==0)return false; } return true;}那么,如果要找出所有素数,使用逐个判断的方法,复杂度会达到O(nn)O(n\sqrt{n})O(n原创 2020-06-23 13:19:00 · 339 阅读 · 0 评论 -
树上最近公共祖先LCA
首先介绍一下朴素的O(N)算法比如我们在树上要找x,y两个节点的LCA,首先我们将两个节点移动到同一深度位置(将深度深的结点向上移动,直到两个节点的深度相同),而后两个节点共同向上移动,直到移动到同一个节点,这个节点就是LCA具体看代码:int find_root(int u,int v){ int depth_u=buf[u].depth; int depth_v=...原创 2020-03-28 23:29:44 · 277 阅读 · 0 评论 -
学习Kruskal并用其解决洛谷P1195口袋的天空
先上题:P1195口袋的天空相比于Prim算法,Kruskal算法更好理解一些。首先介绍这两个算法思想的区别:Prim算法是从点出发,不断查找距离当前生成树最近的点并将其加入。所有点都加入生成树后,得到的就是最小生成树。Kruskal算法是从边出发,每次取出剩余边中的最短边,查看边的两个端点是否在一个生成树内,如果不在,则将其连接在同一个生成树内。所有边遍历后,最后得到就是最小生成...原创 2020-03-25 23:01:45 · 312 阅读 · 0 评论 -
用洛谷P1629记录学习SPFA算法
在学完Dijkstra算法后,又学习了可以计算负边的SPFA算法。当即就找了一个简单的求单源最短路经的题来练手:P1629 邮递员送信这个题增添了“每次邮递员送完信后都要返回起点(并且不能走来时的路)”这一条件,就意味着不能用一次单源最短路径进行计算。除了要计算起点到各个点的最短距离,还要计算从各个点回到起点的最短距离。最初看题想到的是在每个点都进行一次“单源最短路经”计算,但观察数据...原创 2020-03-19 20:35:14 · 217 阅读 · 0 评论 -
由Prim学会Dijkstra
最近在准备机试,刷一些基础题。做到图论的时候把之前学的Prim和Dijkstra复习一下。虽然一个是最小生成树,一个是最短路,但算法思路非常像,除了扩展点时的条件不同,其他过程几乎一样。这里就用两道洛谷普及/提高-难度的题进行对比记忆。Prim算法及其堆优化在我很久之前的博客写过,如果不会可以去学习Prim及其堆优化,本文只对Prim和Dijkstra进行对比。先贴题和AC代码,对比...原创 2020-03-17 18:45:16 · 221 阅读 · 0 评论 -
最小生成树 Prim算法及其堆优化
先来说一下Prim算法的基本思路:1.任意找到图中的一个顶点,作为最小生成树的根,进行标记(已被加入树)开始扩展2.从已扩展的结点中找到权值最小的点(已被扩展,可以保证其与生成树是连通的),记录并标记。3.将与该点相连通的所有结点进行扩展4.循环执行2,3步,直到所有结点都被加入到生成树为此,需要维护几个变量来保存已有状态和记录当前状态:color[MAX]; 用于记录所有...原创 2018-12-02 22:50:04 · 2372 阅读 · 1 评论 -
归并排序求逆序对
归并排序的原理不需多说,就在此提一下怎么在归并排序的过程中求逆序对。先贴代码:#pragma warning (disable :4996)#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>using namespace std;l...原创 2019-02-23 18:21:50 · 455 阅读 · 0 评论