
经典题
常用算法
成长的小牛233
不辜负每一份热爱
展开
-
容斥原理 和 欧拉函数
在概率论中,对于概率空间中的事件A1,……,An,当n = 2时容斥原理的公式为:当n = 3时,公式为:一般地:正数n的唯一素因子分解式=p1^a1 * p2^a2 * p3^a3 ……* pk^ak 。求1,2,3,…… n中与n互素的个数。φ(n)=n(1 - 1/p1) (1 - 1/p2) (1 - 1/p3)转载 2016-07-15 08:36:35 · 1002 阅读 · 0 评论 -
Stein算法(求两个数最大公约数)
欧几里德算法是计算两个数最大公约数的传统算法,他无论从理论还是从效率上都是很好的。但是他有一个致命的缺陷,这个缺陷只有在大素数时才会显现出来。考虑现在的硬件平台,一般整数最多也就是64位,对于这样的整数,计算两个数之间的模是很简单的。对于字长为32位的平台,计算两个不超过32位的整数的模,只需要一个指令周期,而计算64位以下的整数模,也不过几个周期而已。但是对于更大的素数,这样的计算过程就原创 2016-10-06 16:39:17 · 864 阅读 · 0 评论 -
中国剩余定理(模板+代码)
#include#include using namespace std;//扩展欧几里得算法int exgcd(int a,int b,int &x,int &y){ int d; if(b==0) { x=1;y=0; return a; } d=exgcd(b,a%b,y,x); y-=a/b*x;原创 2016-10-06 16:47:14 · 3360 阅读 · 2 评论 -
平方剩余(例题+详解+代码模板)
平方剩余 (poj 1808)题意:判断平方剩余,即判断(x^2)%p=a是否有解。限制:|a| 思路:用欧拉准则计算勒让德符号(用来判断平方剩余)/*poj 1808 题意: 判断平方剩余,即判断(x^2)%p=a是否有解。 限制: |a| <= 1e9 && a % p !=0; 2 < p < 1e9 && p为奇素数。原创 2016-10-06 17:07:29 · 4421 阅读 · 0 评论 -
递归算法的时间复杂度分析
在算法分析中,当一个算法中包含递归调用时,其时间复杂度的分析会转化为一个递归方程求解。实际上,这个问题是数学上求解渐近阶的问题,而递归方程的形式多种多样,其求解方法也是不一而足,比较常用的有以下四种方法: (1)代入法(Substitution Method) 代入法的基本步骤是先推测递归方程的显式解,然后用数学归纳法来验证该解是否合理。转载 2017-11-02 20:48:36 · 1409 阅读 · 0 评论 -
素数筛选法(模板)
#include <stdio.h>#include <string.h>#include <math.h>#define MAX 1000000int is_prime[MAX+5] = {1}; //is_prime[i]是素数为1,不是素数为0int prime_num[MAX]; //prime_num[i]是第i个素数...原创 2016-10-06 17:31:47 · 550 阅读 · 0 评论 -
N次剩余(详解+例题+代码)
从《国际大学生程序设计大赛算法与实现》中所学任务:给定N, a, p, 求出(x^N)%p=a 在模p意义下的所有解x。说明:令g为p的原根,因为p为素数,所以phi(p)=p-1。由原根的性质得:如果g为p的原根,则:g^i mod p != g^j mod p (p为素数), 其中i != j且i, j介於1至(p-1)之间所以,可以设g^y=x, g^t=a,原创 2016-10-06 17:28:28 · 5945 阅读 · 0 评论 -
中国剩余问题(简介+详解)
中国剩余定理 我国古代数学名著《孙子算经》载有一道数学问题:“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?”这里的几何指多少的意思。翻译成数学语言就是:求正整数N,使N除以3余2,除以5余3,除以7余2。 如何求符合上述条件的正整数N呢?《孙子算经》给出了一个非常有效的巧妙解法。术曰:“三、三数之剩二,置一百四十;五、五数之剩三,置六十三原创 2016-10-06 16:41:36 · 8780 阅读 · 0 评论 -
归并排序(视频+详解+代码)
归并排序概述:归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并过程为:比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[原创 2016-10-16 15:38:27 · 2789 阅读 · 1 评论 -
八皇后问题详解(最短代码)
八皇后问题算法分析:分析1:八皇后由一个64格的方块组成,那么把八个皇后放入不考虑其他情况利用穷举法,有8^64种可能。分析2:显然任意一行有且仅有1个皇后,使用数组queen[0->7]表示第i行的皇后位于哪一列。对于“1->8”这八个字符,调用全排列问题(有8!种情况,虽然数字很大但是比分析1已经大大缩短了时间),并且加入分支限界的条件判断是否相互攻击即可。分析2=3:原创 2016-10-11 20:28:28 · 16213 阅读 · 0 评论 -
最大最小距离算法(K-MEANS K-medoids )聚类算法的结合运用
聚类算法通常会得到一种分类,将n个点聚合成k类,同一聚类(即插槽簇)中的对象相似度较高;而不同类中的对象相似度较小。聚类算法的基本流程如下:(1)从n个节点中选择 k 个节点作为初始聚类中心。(2)将剩余节点根据它们与这k个聚类中心的代价大小,分别将它们分配给与其代价最小的(聚类中心所代表的)聚类。(3)更新聚类的聚类中心。不断重复(2)(3)这一过程将剩下其它节点分配完毕。(4)排序,将转载 2016-10-11 18:01:42 · 6970 阅读 · 0 评论 -
给定n个整数,从中选出1个或多个,使选出整数的乘积是完全平方数。一共有多少种选法? 例如,{4,6,10,15}有3种4、6、10、15和4、6、10、15。
#include #include int wanquan(int n){ __int64 num; num=sqrt(n); double x=sqrt(n); if(num-x==0) return 1; else return 0;}int main(){ int n,count=0; __转载 2016-08-14 17:15:48 · 1908 阅读 · 0 评论 -
DP为王——动态规划法学习笔记
动态规划英文名Dynamic Programming,这个名称总让人有一种时曾相识的感觉,可能是因为容易和“线性规划”之类的概念搞混。 首先,适用动态规划的问题十分广泛和常见——地图路径搜索(深度优先、广度优先、A*),填充容器使价值最大化(例如背包体积固定V,有不同的物体具有各自的体积和价值),文本比较算法(常用的diff工具),以及最短路径之类的求最优解的问题转载 2016-08-01 10:25:25 · 1024 阅读 · 0 评论 -
C语言实现大数据除法
本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。输入格式:输入在1行中依次给出A和B,中间以1空格分隔。输出格式:在1行中依次输出Q和R,中间以1空格分隔。输入样例: 123456789050987654321 7 输出样例: 176366841501410934转载 2016-07-29 16:00:33 · 1902 阅读 · 0 评论 -
A*算法启发式搜索
最短路径算法: A*算法擅长解决静态路径中最短距离问题,而又不同于Dijkstra算法和Floyd算法,该算法综合了BFS和Dijkstra算法优点:在进行启发式搜索提高算法效率的同时,可以保证找到一条最优路径(基于评估函数,例如:曼哈顿距离、欧式距离),Floyd算法更多地使用场景在于机器人路径规划、游戏规划、卫星路径探寻等领域。A*算法与最短路径计算:对于地理环境中的一个固定地面...原创 2019-02-28 16:40:04 · 3152 阅读 · 0 评论