算法
文章平均质量分 54
micx0124
hello world
展开
-
最长公共子序列[转]
http://blog.csdn.net/yysdsyl/article/details/4226630动态规划法经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题。简单地采用把大问题分解成子问题,并综合子问题的解导出大问题的解的方法,问题求解耗时会按问题规模呈幂级数增加。为了节约重复求相同子问题的时间,引入一个数组,不管它们是否对最终解有用,把所有转载 2013-03-04 13:54:03 · 255 阅读 · 0 评论 -
poj 2449 Remmarguts' Date(第K短路 A*)
题意:大意是 有N个station 要求从s点到t点 的第k短路 (不过我看题意说的好像是从t到s 可能是出题人写错了)思路: 这是一道 经典的第k短路算法,只要你会就能过。PS:这也是我第一k短路题 学到了很多新的东西 因为没学过A* 算法 所以在网上找了好久,但讲了都不是清楚 解题报告也都不带注释的 这里我就附上详细的解题报告 也好给以后要学的人 一点帮助。从这题中还真的学到了转载 2013-09-29 21:38:37 · 508 阅读 · 0 评论 -
P、NP、NPC
P类中包含的是在多项式时间内可解的问题。NP类中包含的是在多项式时间内“可验证”的问题NPC 如果一个问题属于NP,且与NP中的任何问题是一样“难的”,则说它属于NPC类。即 NP-complete。原创 2013-08-14 19:44:46 · 416 阅读 · 0 评论 -
递归应用
递归算法一般用于解决三类问题:1.数据的定义形式是按递归定义的比如:阶乘的定义斐波那契数列的定义但是这类递归问题往往又可转化成递推算法,递归边界作为递推的边界条件。又如:Ackerman函数当一个函数及它的一个变量是由函数自身定义时,称这个函数是双递归函数Ackerman函数AKM(m,n)定义如下:Ackerman函数无法找到非递归的定义。2.问题原创 2013-08-09 12:42:33 · 589 阅读 · 0 评论 -
排序的最低时间复杂度为什么是O(nlogn)
这个首先要明确一点,只用到比较的排序算法最低时间复杂度是O(nlogn),而像桶排这样的只需要O(R)(R为桶的大小)为了证明只用到比较的排序算法最低时间复杂度是O(nlogn),首先要引入决策树。首先决策树是一颗二叉树,每个节点表示元素之间一组可能的排序,它予以京进行的比较相一致,比较的结果是树的边。先来说明一些二叉树的性质,令T是深度为d的二叉树,则T最多有2^片树叶。具有L片转载 2013-08-09 11:48:52 · 17500 阅读 · 0 评论 -
线段树 总结
http://www.ahathinking.com/archives/136.html转载 2013-08-20 12:22:46 · 375 阅读 · 0 评论 -
KMP
#include using namespace std;char t[100]="aaaaababcdeeeeababcdee";char p[100]="ababcde";int b[100];int n,m;void kmpGetNext(){ int i=0, j=-1; b[i]=j; m=strlen(p); while (i<m)原创 2013-05-06 17:39:24 · 427 阅读 · 0 评论 -
排列组合算法
1. 前言本文介绍了常用的排列组合算法,包括全排列算法,全组合算法,m个数选n个组合算法等。2. 排列算法常见的排列算法有:(A)字典序法(B)递增进位制数法(C)递减进位制数法(D)邻位对换法(E)递归法介绍常用的两种:(1) 字典序法对给定的字符集中的字符规定了一个先后关系,在此基础上按照顺序依次产生每个排转载 2013-04-15 14:47:41 · 662 阅读 · 0 评论 -
回文
如何在O(n)时间内处理字符串以每个位置为中心的最长回文。这里转载一个Manacher算法的论文翻译。原文地址:http://zhuhongcheng.wordpress.com/2009/08/02/a-simple-linear-time-algorithm-for-finding-longest-palindrome-sub-string/ 其实原文说得是比较清楚的,只是英转载 2013-06-26 16:50:23 · 403 阅读 · 0 评论 -
逆波兰表达式及求值
逆波兰表达式,它的语法规定,表达式必须以逆波兰表达式的方式给出。逆波兰表达式又叫做后缀表达式。这个知识点在数据结构和编译原理这两门课程中都有介绍,下面是一些例子:正常的表达式 逆波兰表达式a+b ---> a,b,+a+(b-c) ---> a,b,c,-,+a+(b-c)*d ---> a,b,c,-,d,*,+a+d*(b-c)--->a,d,b,c,-,*,+a=1+原创 2013-06-15 17:00:59 · 614 阅读 · 0 评论 -
二叉堆、二项堆、斐波那契堆
二项堆:http://blog.csdn.net/acceptedxukai/article/details/6951922斐波那契堆:http://www.roading.org/algorithm/introductiontoalgorithm/%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E5%A0%86fibonacci-heaps.html原创 2013-05-28 11:54:57 · 720 阅读 · 0 评论 -
程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大系列集锦
http://blog.csdn.net/v_july_v/article/details/6543438转载 2013-05-26 21:44:37 · 395 阅读 · 0 评论 -
康托展开
{1,2,3,4,...,n}表示1,2,3,...,n的排列如 {1,2,3} 按从小到大排列一共6个。123 132 213 231 312 321 。代表的数字 1 2 3 4 5 6 也就是把10进制数与一个排列对应起来。他们间的对应关系可由康托展开来找到。如我想知道321是{1,2,3}中第几个大的数可以这样考虑 :第一位是3,当第一位的数小于3时,那排列数小于321 如原创 2013-05-22 23:15:22 · 380 阅读 · 0 评论 -
欧拉函数
在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。此函数以其首名研究者欧拉命名,它又称为Euler's totient function、φ函数、欧拉商数等。 例如φ(8)=4,因为1,3,5,7均和8互质。 从欧拉函数引伸出来在环论方面的事实和拉格朗日定理构成了欧拉定理的证明。 φ函数的值 通式:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1原创 2013-05-04 17:14:56 · 504 阅读 · 0 评论 -
抛银币 概率题
有道概率题:一个有趣的抛硬币问题假设有一个硬币,抛出字(背面)和花(正面)的概率都是0.5,而且每次抛硬币与前次结果无关。现在做一个游戏,连续地抛这个硬币,直到连续出现两次字为止,问平均要抛多少次才能结束游戏?注意,一旦连续抛出两个“字”向上游戏就结束了,不用继续抛。先来考虑一下抛硬币的过程:首先先抛一枚硬币,如果是花,那么需要重头开始;如果是字,那么再抛一枚硬币,新抛转载 2013-05-04 16:46:48 · 844 阅读 · 0 评论 -
解决哈希(HASH)冲突的主要方法
虽然我们不希望发生冲突,但实际上发生冲突的可能性仍是存在的。当关键字值域远大于哈希表的长度,而且事先并不知道关键字的具体取值时。冲突就难免会发 生。另外,当关键字的实际取值大于哈希表的长度时,而且表中已装满了记录,如果插入一个新记录,不仅发生冲突,而且还会发生溢出。因此,处理冲突和溢出是 哈希技术中的两个重要问题。1、开放定址法 用开放定址法解决冲突的做法是:当冲突发生时,使用某种转载 2013-05-15 20:20:12 · 435 阅读 · 0 评论 -
笔试题经典算法:查找中位数
查找中位数是面试中经常出现的一类题。用快速排序的思想可以解决这种问题,算法如下:1.抽取数组的第一个元素作为中间值,用快速排序的思想进行一次调整,将比中间值小的放在中间值的左边,比中间值大的放在中间值的右边。2.如果中间值的索引等于数组长度的一半,那么就找到了。3.如果中位数的索引比数组长度的一半大的话,那么在中间值的索引到数组的结尾这个期间内找第(数组长度的一半-中位数)原创 2013-02-25 14:38:13 · 1424 阅读 · 0 评论 -
catalan数
卡塔兰数是组合数学中一个常出现在各种计数问题中出现的数例。由比利时的数学家欧仁·查理·卡塔兰(1814-1894)命名。卡塔兰数的一般公式为 C(2n,n)/(n+1)。性质令h(0)=1,h(1)=1,catalan数满足递归式:h(n)= h(0)*h(n-1) + h(1)*h(n-2) + ... + h(n-1)h(0) (其中n>=2),这是n阶递推关系;还可以化简为1原创 2013-05-04 17:02:01 · 473 阅读 · 0 评论