
计算机算法
文章平均质量分 83
luo964061873
这个作者很懒,什么都没留下…
展开
-
费氏搜索浅谈
说明: 二分搜尋法每次搜尋時,都會將搜尋區間分為一半,所以其搜尋時間為O(log(2)n),log(2)表示以2為底的log值, 這邊要介紹的費氏搜尋,其利用費氏數列作為間隔來搜尋下一個數,所以區間收斂的速度更快,搜尋時間為O(logn)。 解法: 費氏搜尋使用費氏數列來決定下一個數的搜尋位置,所以必須先製作費氏數列,這在之前有提過;費氏搜尋會先透過公式計算求出第一個要搜尋數的位置,原创 2012-08-03 16:41:39 · 736 阅读 · 0 评论 -
状态压缩dp与树形dp
状态压缩动态规划 动态规划的状态有时候比较难,不容易表示出来,需要用一些编码技术,把状态压缩的用简单的方式表示出来。典型方式:当需要表示一个集合有哪些元素时,往往利用2进制用一个整数表示。 *:一般有个数据 n *:确定了为状态DP,那么第一步就是预处理,求出每行所有可能的状态了,cnt记录总的状态数,stk[]记录所有的可能状态。以炮兵阵地为例:转载 2012-09-19 09:39:24 · 554 阅读 · 0 评论 -
位运算符
一、位运算符C语言提供了六种位运算符: & 按位与 | 按位或 ^ 按位异或 ~ 取反 >> 右移 1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。 例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码转载 2012-09-19 10:42:07 · 457 阅读 · 0 评论 -
hdu 1251统计难题
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1251 字典树模版题 动态实现: #include #include #include #define maxn 26 struct node { int count; node *next[maxn]; }*root; void insert(char str[]) {原创 2012-09-15 08:16:32 · 355 阅读 · 0 评论 -
KM算法总结
【二分图】二分图是一种特殊的图结构,所有点分为两类,记做x和y,所有的边的两端分别在x和y,不存在两端同在x或y的边。 【最大匹配、完备匹配】 给定一个二分图(x,y),找到一种匹配数最大的方案,记做最大匹配。|x|=|y|=匹配数时,我们称该匹配方案为完备匹配。 显然,解决了最大匹配也就解决了完备匹配。 解决二分图的最大匹配可以用网络流或者匈牙利算法,两者本质上是相同的,不过不论从编转载 2012-09-08 21:20:13 · 653 阅读 · 0 评论 -
对于 前K短路径问题 和 A*算法 的一些小小总结
首先,为了说话方便,列出一些术语: 在启发式搜索中,对于每个状态 x,启发函数 f(x) 通常是这样的形式: f(x) = g(x) + h(x) 其中 g(x) 是从初始状态走到 x 所花的代价;h(x) 是从 x 走到目标状态所需要的代价的估计值。 相对于 h(x),还有一个概念叫 h*(x),表示从 x 走到目标状态所需要的实际最小代价(当转载 2012-09-05 15:16:29 · 3598 阅读 · 2 评论 -
五大常用算法之四:回溯法
1、概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。 回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。 许多复杂的,规模较大的问题都可以使用回转载 2012-08-07 10:25:11 · 507 阅读 · 0 评论 -
五大常用算法之三:贪心算法
贪心算法 一、基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。 贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只转载 2012-08-07 10:17:05 · 373 阅读 · 0 评论 -
五大常用算法之二:动态规划算法
一、基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。 二、基本思想与策略 基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通转载 2012-08-07 10:16:18 · 310 阅读 · 0 评论 -
五大常用算法之一:分治算法
分治算法 一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 任何一个可以用计算机求解的问题所需的计转载 2012-08-07 10:10:27 · 389 阅读 · 0 评论 -
浅谈记忆化搜索
【摘要】 搜索和动态规划是信息学中的两大重要算法。它们各有自己的优点和缺点。针对它们的优缺点,一个新的算法——“记忆化搜索”产生了。它采用了搜索的形式与动态规划的思想,扬长避短,在解决某些题目时,有非常出色的表现。它在信息学竞赛中也有举足轻重的地位,NOI2001的cannon与NOI2002的dragon都使用到了这个算法。这篇论文着重分析了搜索、动态规划和记忆化搜索之间的联系和区别,以及各自转载 2012-08-02 19:22:52 · 879 阅读 · 0 评论 -
定义区间dp
区间动态规划问题一般都是考虑,对于每段区间,他们的最优值都是由几段更小区间的最优值得到,是分治思想的一种应用,将一个区间问题不断划分为更小的区间直至一个元素组成的区间,枚举他们的组合 ,求合并后的最优值。 设F[i,j](1 最小区间F[i,i]=0(一个数字无法合并,∴代价为0) 每次用变量k(i For p:=1 to n do // p是区间长度,作为阶段。 for i:=转载 2013-08-11 11:13:24 · 530 阅读 · 0 评论