「Meissel-Lehmer 算法」是一种能在亚线性时间复杂度内求出 \(1\sim n\) 内质数个数的一种算法. 在看素数相关论文时发现了这个算法,论文链接:Here. 算法的细节来自 OI wiki,转载仅作为学习使用. 目前先 mark 一下这个算法,等有空的时候再来研究一下,算法的时间复杂度为 \(\mathcal{O}(n^{\frac23})\) ,所以 \(n\) 的范围可以扩大至 \(10^{12}\) 的级别: 代码实现 #include <bits/stdc++.h>…
Kosaraju算法一看这个名字很奇怪就可以猜到它也是一个根据人名起的算法,它的发明人是S. Rao Kosaraju,这是一个在图论当中非常著名的算法,可以用来拆分有向图当中的强连通分量. 背景知识 这里有两个关键词,一个是有向图,另外一个是强连通分量.有向图是它的使用范围,我们只能使用在有向图当中.对于无向图其实也存在强连通分量这个概念,但由于无向图的连通性非常强,只需要用一个集合维护就可以知道连通的情况,所以也没有必要引入一些算法. 有向图我们都了解,那么什么叫做强连通分量呢?强连通分量的…
在上一篇文章当中我们分享了强连通分量分解的一个经典算法Kosaraju算法,它的核心原理是通过将图翻转,以及两次递归来实现.今天介绍的算法名叫Tarjan,同样是一个很奇怪的名字,奇怪就对了,这也是以人名命名的.和Kosaraju算法比起来,它除了名字更好记之外,另外一个优点是它只需要一次递归,虽然算法的复杂度是一样的,但是常数要小一些.它的知名度也更高,在竞赛当中经常出现. 先给大家提个醒,相比于Kosaraju算法,Tarjan算法更难理解一些.所以如果你看完本文没有搞明白的话,建议可以阅读…
转载自:http://www.cnblogs.com/candy99/p/6200660.html 2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 4436  Solved: 1957[Submit][Status][Discuss] Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 1<=N<=10^7 uva上做过gcd(x,y)=1的题 gcd(x,y…
原始地址:C / C++算法学习笔记(8)-SHELL排序 基本思想 先取一个小于n的整数d1作为第一个增量(gap),把文件的全部记录分成d1个组.所有距离为dl的倍数的记录放在同一个组中.先在各组内进行直接插入排序:然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<:…<d2<d1),即所有记录放在同一组中进行直接插入排序为止. 该方法实质上是一种分组插入方法. 算法编码 void shellSort(int v[], int n)…
提出混合模型主要是为了能更好地近似一些较复杂的样本分布,通过不断添加component个数,能够随意地逼近不论什么连续的概率分布.所以我们觉得不论什么样本分布都能够用混合模型来建模.由于高斯函数具有一些非常有用的性质.所以高斯混合模型被广泛地使用. GMM与kmeans相似,也是属于clustering,不同的是.kmeans是把每一个样本点聚到当中一个cluster,而GMM是给出这些样本点到每一个cluster的概率.每一个component就是一个聚类中心. GMM(Gaussian Mi…
Manacher算法学习笔记 DECLARATION 引用来源:https://www.cnblogs.com/grandyang/p/4475985.html CONTENT 用途:寻找一个字符串的最长回文子串 时间复杂度:O(N) 算法步骤: 1.添加特殊字符 由于回文串的长度可奇可偶,比如"bob"是奇数形式的回文,"noon"就是偶数形式的回文,马拉车算法的第一步是预处理,做法是在每一个字符的左右都加上一个特殊字符,比如加上'#',那么 bob -->…
\(Johnson\)算法学习笔记. 在最短路的学习中,我们曾学习了三种最短路的算法,\(Bellman-Ford\)算法及其队列优化\(SPFA\)算法,\(Dijkstra\)算法.这些算法可以快速的求出单源最短路,即一个源点的最短路. 而\(Floyd\)算法,这个及其简短的算法,可以以\(O(n^3)\)的复杂度算出任意一对点之间的最短路. 我们发现,\(floyd\)算法的时间复杂度和边的数量没有多大的关系,也就是说,\(floyd\)使用的最优条件是稠密图. 那么问题来了,如果我们面…
最近,在某社团的要求下,自学了PID算法.学完后,深切地感受到PID算法之强大.PID算法应用广泛,比如加热器.平衡车.无人机等等,是自动控制理论中比较容易理解但十分重要的算法. 下面是博主学习过程中所做的笔记,笔记后面提供了4种编程语言的仿真代码(C, C++, Python, Matlab),使实现方式更加灵活,同时增强对PID的理解.(文章较长,可点击右侧目录选择性阅读) PID算法学习笔记 参考:PID基础入门教程 一.位式控制算法 1.1 位式控制算法原理 位式控制算法,通过比较SV(…
Johnson 全源最短路径算法学习笔记 如果你希望得到带互动的极简文字体验,请点这里 我们来学习johnson Johnson 算法是一种在边加权有向图中找到所有顶点对之间最短路径的方法.它允许一些边权重为负数,但可能不存在负权重循环.它的工作原理是使用Bellman-Ford 算法来计算输入图的转换,该转换去除了所有负权重,从而允许在转换后的图上使用Dijkstra 算法.Johnson 算法是一种在边加权有向图中找到所有顶点对之间最短路径的方法.它允许一些边权重为负数,但可能不存在负权重循…