算法
文章平均质量分 76
tattarrattat
A man,a pIan,a canal---Panama
展开
-
判断有向图回路
n问题分析:如果图中存在回路,则必包含一个子图为回路。即该子图中所有顶点入度不为0且至少有边指向另外的顶点。 n算法: n步骤1:按邻接表方式存储图。遍历与每个节点关联的边并统计每个节点的入度。需要O(n+m)次的运算。 n步骤2:删除所有入度为零的顶点及其相发出的边。并将被删除边所指向的顶点的入度减1。 n重复步骤二直到: case1: 所有顶点被删除(则没原创 2008-03-01 18:31:00 · 10662 阅读 · 2 评论 -
Bloom-Filter算法
<br />一、 Bloom-Filter算法简介。<br />Bloom-Filter,即布隆过滤器,1970年由Bloom中提出。它可以用于检索一个元素是否在一个集合中,其优点是空间效率和查询时间都远远超过其他算法,其不足在于Bloom-Filter存在着误判。<br /><br />二、 Bloom-Filter的基本思想。<br />Bloom-Filter算法的核心思想就是利用多个不同的Hash函数来解决“冲突”。<br />计算某元素x是否在一个集合中,首先能想到的方法就原创 2010-09-14 14:34:00 · 2489 阅读 · 1 评论 -
寻找最大的K个数
问:有很多个无序的数,我们姑且假定它们各不相等,怎么选出其中最大的若干个数呢? 答:可以这样写:int array[100] …… 问:好,如果有更多的元素呢? 答:那可以改为:int array[1000] …… 问:如果我们有很多元素,例如1亿个浮点数,怎么办? 答:个,十,百,千,万……那可以写:float array [100 0转载 2009-01-13 14:54:00 · 1657 阅读 · 0 评论 -
一些 基本算法
基本算法 1.数论算法 求两数的最大公约数 function gcd(a,b:integer):integer; begin if b=0 then gcd:=a else gcd:=gcd (b,a mod b); end ; 求两数的最小公倍数 function lcm(a,b:integer):integer; begin if alcm:=a; while lcm mod b >0 do转载 2008-03-07 17:35:00 · 1237 阅读 · 0 评论 -
带权中位数问题:
带权中位数问题:1.带权中位数 我国蒙古大草原上有N(N是不大于100的自然数)个牧民定居点P1(X1,Y1)、P2(X2,Y2)、 …Pn(Xn,Yn),相应地有关权重为Wi,现在要求你在大草原上找一点P(Xp,Yp),使P点到任 一点Pi的距离Di与Wi之积之和为最小。 即求 D=W1*D1+W2*D2+…+Wi*Di+…+Wn*Dn 有最小值 结论:对x与y两个方向转载 2008-03-07 17:28:00 · 3028 阅读 · 1 评论 -
动态规划--邮局选址问题
动态规划(Dynamic Programming)是一种算法设计技术,它有着相当有趣的历史。作为一种使多阶段决策过程最优的通用方法,它是在20世纪50年代由一位卓越的美国数学家Richard Bellman所发明的。因此,这个技术名字中的“programming”是计划和规划的意思,不是代表计算法中的编程。它作为一种重要的工具在应用数学中的价值被大家认同以后,起码在计算机科学的圈子里,人们不仅用它转载 2008-03-07 17:19:00 · 19696 阅读 · 3 评论 -
最少硬币问题--贪心算法
设有n种不同面值的硬币,各硬币的面值存于数组T〔1:n〕中。现要用这些面值的硬币来找钱。可以使用的各种面值的硬币个数存于数组Coins〔1:n〕中。 对任意钱数0≤m≤20001,原创 2008-03-05 14:46:00 · 17081 阅读 · 1 评论 -
石子合并(动态规划)详细解题报告
一.试题 在一个园形操场的四周摆放N堆石子(N≤100),现要将石子有次序地合并成一堆。规定 每次只能选相邻的两堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。 编一程序,由文件读入堆数N及每堆的石子数(≤20), ①选择一种合并石子的方案,使得做N-1次合并,得分的总和最小; ②选择一种合并石子的方案,使得做N-1次合并,得分的总和最原创 2008-03-05 14:34:00 · 6238 阅读 · 1 评论 -
石子合并问题 --动态规划--解法1
在一个圆形操场的四周摆放着n堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。试设计一个算法,计算出将n堆石子转载 2008-03-05 14:31:00 · 12617 阅读 · 3 评论 -
KMP字符串模式匹配详解
KMP字符串模式匹配详解KMP字符串模式匹配通俗点说就是一种在一个字符串中定位另一个串的高效算法。简单匹配算法的时间复杂度为O(m*n);KMP匹配算法。可以证明它的时间复杂度为O(m+n).。一.简单匹配算法先来看一个简单匹配算法的函数:int Index_BF ( char S [ ], char T [ ], int pos ) { /* 若串 S 中转载 2008-03-01 19:02:00 · 1117 阅读 · 0 评论 -
模式匹配的KMP算法详解
模式匹配的KMP算法详解这种由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现的改进的模式匹配算法简称为KMP算法。大概学过信息学的都知道,是个比较难理解的算法,今天特把它搞个彻彻底底明明白白。注意到这是一个改进的算法,所以有必要把原来的模式匹配算法拿出来,其实理解的关键就在这里,一般的匹配算法:int Index(String S,String T,int pos原创 2008-03-01 18:47:00 · 965 阅读 · 0 评论 -
动态规划题目
动态规划 实验目的:理解动态规划的基本思想,理解动态规划算法的两个基本要素最优子结构性质和子问题的重叠性质。熟练掌握典型的动态规划问题。掌握动态规划思想分析问题的一般方法,对较简单的问题能正确分析,设计出动态规划算法,并能快速编程实现。 实验内容:编程实现讲过的例题:最长公共子序列问题、矩阵连乘问题、凸多边形最优三角剖分问题、电路布线问题等。本实验中的问题,设计出算法并编程实现。 习题 1. 最长原创 2008-03-01 19:47:00 · 4114 阅读 · 0 评论 -
Euclid算法与RSA
历史上第一个称得上算法的好像就是这个欧几里得算法,其实就是地球人都知道的辗转相除,不要小看她,她是很美的。简单的描述就是,记gcd(a,b)表示非负整数a,b的最大公因数,那么:gcd(a,b)=gcd(b,a%b)或者gcd(a,0)=gcd(0,a)=a。写成程序很简单,不管是用递归还是循环:int gcd(int a,int b){ if(a==0)转载 2008-03-01 18:49:00 · 1498 阅读 · 1 评论 -
最短带权路径问题的解法::Dijkstra & Floyd
最短带权路径问题的解法::Dijkstra & Floyd 在一个网络中,如果两个结点之间有直接的因果关系,则这两个结点直接连通,在连接两个结点的弧上标上它的代价或权,值得注意的是这样的代价不一定是对称的,即A到B的代价不一定等于B到A的代价,实际问题中以行船为例,有顺水和逆水的区别。在图G中,给出两个结点求这样一条最短的路径,使经过这条路径上的代价之和最小,这就是最短路径问题。 如果所有原创 2008-03-01 18:47:00 · 1896 阅读 · 0 评论 -
判断无向图是否有回路
如果存在回路,则必存在一个子图,是一个环路。环路中所有顶点的度>=2。 n算法: 第一步:删除所有度的顶点及相关的边,并将另外与这些边相关的其它顶点的度减一。 第二步:将度数变为1的顶点排入队列,并从该队列中取出一个顶点重复步骤一。 如果最后还有未删除顶点,则存在环,否则没有环。 n算法分析: 由于有m条边,n原创 2008-03-01 18:32:00 · 9827 阅读 · 4 评论 -
NOIP基本程序题集
NOIP是一个比较基础的比赛,大家都说NOIP是考察基本算法的熟练掌握,所以个人认为无论是普及组还是提高组,都要从最最基本的题做起,要达到:只要是简单题,编完就对——不用编译;一般的题,写出来的都是对的——运行后几本上是正确的。为了提高,于是做了一个基本程序题集,以便查找自己的不足之处。 题集目录一、 贪心算法Problem1删数问题Pro转载 2008-03-01 23:16:00 · 12008 阅读 · 1 评论 -
关于搜索引擎及其开发
<br /><br /> 托google、百度们成功的福,搜索引擎火了半边天。很多人都想跨到这个行业里边来。前两天在公司里边面试了一些人,基本上没有感到满意。不是说从业经验不够,有些也已经工作了三年、四年。不过我估计,或者说是猜想,是不是做应用做的时间太长了,把数据结构、算法,时间、效率都扔到一边去了;然后平时的工作又太忙,平时自己工作的做的可以,但对工作相关的、稍微扩展的知识没有时间或者说是懒得去看了。。。。。<br /> 我的想法是,如果有兄弟姐妹要进入这个行业,最好对这个行业流行的想法、做法了解一转载 2011-03-23 17:07:00 · 3201 阅读 · 2 评论