算法
醉等佳人归
这个作者很懒,什么都没留下…
展开
-
减治法与分治法
生成组合对象的算法生成排列为了简单起见,假设需要对元素进行排列的集合是从1到n的简单整数集合。减治法怎么解决呢?该问题的规模减一就是要生成所有(n-1)!排列。假设这个较小的问题已经解决了,我们可把n插入n-1个元素的每一种排列中的n个可能位置中去, 来得到较大规模问题的一个解。按照这种方式生成的排列都是独一无二的,并且他们总数量应该是n(n-1)!= n!#include <io...原创 2020-03-30 21:00:01 · 713 阅读 · 0 评论 -
最近对问题和凸包问题
最近对问题最近点对问题要求在一个包含n个点的集合中,找出距离最近的两个点蛮力法很显然,蛮力法应该是这样,分别计算每一对点之间的距离,然后找出距离最小的那一对。时间复杂度为O(n2)double BruteForceCloestPoints(Node a[]){ int mindist = inf; for(int i = 0;i<n-1;++i){ for(int j ...原创 2020-03-30 11:34:34 · 609 阅读 · 0 评论 -
线性规划与单纯形法
文章目录一、单纯形法——线性规划的经典算法1.单纯形法概述2.单纯形表一、单纯形法——线性规划的经典算法极点定理:可行区域非空的任意线性规划问题有最优解,而且,最优解总是能够在其可行区域的一个极点上找到这个定理告诉我们,在解一个线性规划问题时,起码在可行区域有界的情况下,我们只需考虑有限数量的点,而可以忽略其他所有点。大体来说,我们可以这样求解问题:在每个极点上计算目标函数的值,然后...原创 2020-03-22 18:06:42 · 1223 阅读 · 0 评论 -
树状数组与线段树
lowbit运算lowbit(x) = x & (-x) 求能整除x的最大2的幂次的数。如6求出来是2。树状数组需要解决的应用先来看一个问题:给出一个整数序列A,元素个数为N,接下来查询K次,每次查询将给出一个正整数x,求前x个整数之和正常方法应该使用离线查询,即定义一个sum数组,sum[i]为前i个元素之和,直接查询sum[i]就行了了【一般对一个操作多次使用就考虑能...原创 2020-03-20 14:50:02 · 438 阅读 · 0 评论 -
分块思想
分块思想解决的问题对于一个序列取出第K大的元素。对于暴力方法,即先排序在查找的时间复杂度达到O(nlogn),而分块思想只用O(√n)分块思想分块思想即把大小为n的序列分成⌊√n⌋个块,然后定义一个block[]数组存放每一块中总元素的个数,并用一个hash数组table[100001]其中table[x]表示整数x的当前存在个数这样当想要取出第K大的元素的时候,首先从小到大枚举块号,利用...原创 2020-03-18 21:08:37 · 108 阅读 · 0 评论 -
动态规划法
文章目录1.动态规划的递归写法和递推写法(1)什么是动态规划(2)动态规划的递归写法(2)动态规划的递推写法2.动态规划经典题目(1)最大连续序列和(2)最长不下降子序列(LIS)(3)最长公共子序列(LCS)1.动态规划的递归写法和递推写法(1)什么是动态规划动态规划(Dynamic Programming,DP)是一种用来解决一类最优化问题的算法思想,简单来说,动态规划将一个复杂的问题分...原创 2020-03-17 15:54:16 · 202 阅读 · 0 评论 -
算法中的数学问题
文章目录1.最大公约数和最小公倍数(1)最大公约数(2)最小公倍数2.分数相关(1)分数的表示和化简分数的表示分数的化简(2)分数的四则运算3.素数(质数)(1)素数的判断(2)素数表的获取4.质因子分解1.最大公约数和最小公倍数(1)最大公约数正整数a与b的最大公约数是指a与b的所有公约数中最大的那个公约数,记为gcd(a,b),而求解最大公约数常用欧几里得算法(即辗转相除法)欧几里得算...原创 2020-03-16 12:33:06 · 424 阅读 · 0 评论 -
两个高效技巧——活用递推和随机选择算法
活用递推有很多题目需要细心考虑过程中是否可能存在递推关系,如果能找到这样的递推关系,就能使时间复杂度下降不少。例如就一类涉及序列的题目来说,加入序列的每一位所需要计算的值都可以通过该位左右两侧的结果计算得到,那么就可以考虑所谓的“左右两侧的结果”是否能够递推进行预处理来得到,这样在后面的使用中就可以不比反复求解让我们看一个例子:通过仔细思考,我们可以发现,每对一个确定的A,它能形成PAT的...原创 2020-03-15 22:11:22 · 142 阅读 · 0 评论 -
二分法
二分法使用条件:序列有序1.二分查找先确定待查记录所在范围,然后逐步缩小范围直到找到或找不到该记录为止int Search_Bin(int ST[],int key){ int low = 0,high = ST.length-1; while(low<=high) { int mid = (low+high)/2; if(ST[mid]<key) h...原创 2020-03-15 21:15:23 · 318 阅读 · 0 评论 -
贪心法
贪心法是求解一类最优化问题的方法,它总是考虑在当前状态下局部最优(或较优)的策略,来使全局的结果达到最优(或较优)。显然,如果采用较优而非最优的策略,得到的全局结果也无法是最优的。而要获得最优结果,则要求中间的每步策略都是最优的,因此严谨使用贪心法来求解最优化问题需要对采取的策略进行证明。不过对于平常使用来说,也许没有时间或不太容易对想到的策略进行严谨的证明,因此一般来说,如果在想到某个似乎可行的...原创 2020-03-15 19:50:45 · 236 阅读 · 0 评论 -
日期处理问题
题目描述思路代码int month[13][2] ={ {0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31}};bool isLeap(int year){ return ((year % 4 == 0 && ...原创 2020-03-15 18:02:29 · 152 阅读 · 0 评论 -
C/C++常见函数
文章目录1.C语言常用math函数2.string.h头文件包含的函数3.sscanf和sprintf4.自定义浮点数比较函数5.圆周率6.string用法7.priority_queue8.pair的常见用法9.algorithm头文件下的常用函数1.C语言常用math函数fabs(double x):对浮点型取绝对值floor(double x)/ceil(double x):向下/上...原创 2020-03-15 17:08:01 · 246 阅读 · 0 评论 -
外部排序算法
文章目录1.外部排序的方法2.多路平衡归并的实现外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,在排序过程中需进行多次的内、外存之间的交换。1.外部排序的方法外部排序基本上由两个相对独立的阶段组成。按可用内存大小,将外存上含n个记录的文件分成若干长度为l的子文件或段(segment),一次读入内存并利用有效的内部排序方法对它们进行排序,并将排序后得到的有序子文件重新写入外存...原创 2020-03-15 12:42:11 · 358 阅读 · 0 评论 -
内部排序算法汇总
文章目录1.概述1.插入排序(1)直接插入排序O(n2)(2)希尔排序(小于O(n2))2.快速排序(1)冒泡排序O(n2)(2)快速排序(two pointers)1.概述排序是计算结程序设计中的一种重要操作,它的功能是将一个数据元素的任意序列,重新排列一个换关键字有序的序列。如果排序中存在着两个和两个以上的关键字相等的记录,那么如果排序后的序列是惟一的,则称用的排序方法是稳定的;反之,...原创 2020-03-14 20:00:55 · 296 阅读 · 0 评论 -
查找算法汇总
文章目录1.概述2.静态查找表(1)顺序表的查找(2)有序表的查找——二分查找(3)索引顺序表的查找3.动态查找表(1)二叉查找树(2)平衡二叉树(AVL树)(3)B-和B+树(4)键树1.概述查找表:查找表是由同一类型的数据元素构成的集合。由于“集合”中的数据元素之间存在完全松散的关系,因此查找表是一种非常灵便的数据结构对查找表经常进行的操作有:查询某个“特定的”数据元素是否在查找表...原创 2020-03-13 16:10:24 · 311 阅读 · 0 评论