
算法文章
文章平均质量分 67
qian言wan语
苟有恒,何必三更睡五更起。
展开
-
取石子(巴什博弈)
巴什博奕 巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(原创 2014-09-06 19:21:36 · 426 阅读 · 0 评论 -
谈谈并查集
并查集的原理最初做并查集是杭电1232畅通工程首先,在地图上给你几个城镇,告诉你哪些城镇之间是直接连通的,最后要解决整幅图的连通性问题。比如给你两个点,让你判断它们之间是否连通,或者是给你一幅图的几个连通分支树,也就是被分成了即个独立的块。像畅通工程这样,问还需要修几条路,实际上是求有几个连通分支。如果有一个连通分支,说明整幅图都连通了,就不用修路了;如果有两个连通分支,那么还需要修一条路原创 2014-12-05 20:18:59 · 467 阅读 · 0 评论 -
博弈汇总
博弈知识汇总有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够取胜。(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜原创 2014-10-21 22:19:53 · 330 阅读 · 0 评论 -
最长上升子序列
最长上升子序列问题是各类信息学竞赛中的常见题型,也常常用来做介绍动态规划算法的引例,笔者接下来将会对POJ上出现过的这类题目做一个总结,并介绍解决LIS问题的两个常用算法(n^2)和(nlogn).问题描述:给出一个序列a1,a2,a3,a4,a5,a6,a7....an,求它的一个子序列(设为s1,s2,...sn),使得这个子序列满足这样的性质,s1例如有一个序列:1 7 3原创 2014-11-03 11:33:57 · 323 阅读 · 0 评论 -
大数阶乘
大数阶乘算法前几天朋友问我一个问题:“10000的阶乘怎么算?”当时我就有点懵,“10000”这个数字太大了,无论用什么数据类型保存结果都会溢出。这可怎么办呢?一时间束手无策。然后被一顿鄙视。后来经朋友的提醒,才恍然大悟,终于知道怎么实现了,原来是使用数组来模拟数字,这样无论结果数字有多大,只要数组的长度够长就能表示出来,用这个办法可以进行大数据的运算。看起来还是挺有用的。我把它用程序实现转载 2014-09-12 23:02:19 · 421 阅读 · 0 评论 -
快速幂运算
普通的求幂时间复杂度为O(n);但是可以有更好的算法,实际上循环log(2,n),n^k = n^(k1*2^0 + k2*2^1 + k3*2^3 ....) k1,k2...k(log2,n)取0,1,为k的二进制中每一个bit位展开便可得。n^(k1*2^0) * n^(k2*2^1) * n^(k3*2^2).......至此,一个较优的算法出现了翻译 2014-10-07 09:55:30 · 329 阅读 · 0 评论 -
排序法
算法一:插入排序 插入排序示意图插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。算法步骤:1)将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。2)从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如原创 2014-09-03 14:25:02 · 444 阅读 · 0 评论 -
二维向量的叉乘判断凹凸多边形
向量叉乘判断凹凸多边形的问题我在做一道题,题目的意思是按照逆时针的顺序给几个点的坐标,求这几个点围成多边形是凹的还是凸的.我在网上看到了一个公式:平面上三个点:p1(x1,y1),p2(x2,y2),p3(x3,y3)s(p1,p2,p3)=(x1-x3)*(y2-y3)-(x2-x3)*(y1-y3)如果s>0 则说明 这连接这3个点时是按照逆时针的顺序,如果原创 2014-09-02 01:10:34 · 5849 阅读 · 0 评论 -
快速幂取余
快速幂取模算法在网站上一直没有找到有关于快速幂算法的一个详细的描述和解释,这里,我给出快速幂算法的完整解释,用的是C语言,不同语言的读者只好换个位啦,毕竟读C的人较多~所谓的快速幂,实际上是快速幂取模的缩写,简单的说,就是快速的求一个幂式的模(余)。在程序设计过程中,经常要去求一些大数对于某个数的余数,为了得到更快、计算范围更大的算法,产生了快速幂取模算法。[有读者反映在讲快速幂部转载 2014-09-23 16:37:33 · 378 阅读 · 0 评论 -
总结一下二分搜索
二分搜法,是通过不断缩小解可能存在的范围,从而求得问题最优解的方法。举个例子: 从有序数组中查找某个值: lower_bound 给定长度是n的单调不下降序列,a[0],a[1],a[2],...........a[n-1],和一个数k,求满足a[i]>=k条件的最小的i。不存在的情况下输出n.限制条件:1<=n<=10^60<=k<=10^90<=a[原创 2015-01-18 13:03:46 · 807 阅读 · 1 评论