随笔分类 -  算法

摘要:(1)数值随机化 (2)蒙特卡罗 (3)拉斯维加斯 (4)舍伍德算法 阅读全文
posted @ 2017-04-09 20:38 郑龙天 阅读(104) 评论(0) 推荐(0)
摘要:1.随便选一个数,以它为基准进行一次快速排序的partition,将小于它的放左边,大于它的放右边 2.算出 刚才选出的那个数的个数,它们现在都在数组中间。 数组现在分成 3 部分了,小于它的,它(们),大于它的 比较小于它的个数的个数若是大于它的个数,则向左递归,右边同理 否则就是它了。 阅读全文
posted @ 2017-01-11 19:28 郑龙天 阅读(202) 评论(0) 推荐(0)
摘要:和0-1背包问题一样,只是要这样看: 背包容量:所有人的重量和的一半 重量:就是每个人的重量 价值:还是每个人的重量 因为每一步最后结果是会求出价值最大的,这里也就是重量最大的,但是会受到背包容量的约束,所以最后结果会求出小于背包容量的最大的重量。 阅读全文
posted @ 2016-12-19 16:52 郑龙天 阅读(1062) 评论(0) 推荐(0)
摘要:分析: 有用的量:城市集合V={a,b,c,d,……} 所以我们用 T(i,V) 表示从 城市 i 出发遍历集合 V 中的城市一遍且仅一遍后回到 i 所用的最少费用(这里可能表达不好,底下会看到,但是于代码方面无碍) 用T(k,{空集合})表示从最后一个点 k 回到起点 i 的费用 所以: 阅读全文
posted @ 2016-12-17 18:00 郑龙天 阅读(1975) 评论(0) 推荐(0)
摘要:写了半天,效率还是有点低的,以后有空再优化下: 阅读全文
posted @ 2016-12-09 20:36 郑龙天 阅读(386) 评论(0) 推荐(0)
摘要:先瞟一眼代码: (1)分解:以a[p]为基准,将数组 a[p:r] 分成三段a[p:q-1],a[q],a[q+1:r],下标q在分解过程中确定; (2)递归:用递归分别对a[p:q-1] 和 a[q+1:r] 进行分解; (3)合并:因为数组中的元素在 分解 过程中已经排好序了,因此不需要任何计算 阅读全文
posted @ 2016-12-04 21:23 郑龙天 阅读(181) 评论(0) 推荐(0)
摘要:问题: 在 n × n 方格的国际象棋棋盘上,马(也称为骑士Knight)从任意指定的方格出发,以跳马规则(横一步竖两步或横两步竖一步),周游棋盘的每一个格子,要求每个格子只能跳过一次。 思路: 搜索部分就是普通的回溯 但是我这里设计了一个剪枝函数,具体思路就是每走一步,就判断下地图中是否有永远不能 阅读全文
posted @ 2016-11-28 18:22 郑龙天 阅读(3712) 评论(0) 推荐(0)
摘要:。 阅读全文
posted @ 2016-11-27 10:17 郑龙天 阅读(247) 评论(0) 推荐(0)
摘要:问题: 如何能够在 n×n 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。 分析: 这题常规的解法应该是回溯法,然而回溯法的话,要遍历所有的情况。 这里介绍一种随机化的算法: 我们先摆开头的几个棋子,然后剩下的棋 阅读全文
posted @ 2016-11-27 10:11 郑龙天 阅读(3999) 评论(0) 推荐(0)
摘要:子集树: 排列树: 阅读全文
posted @ 2016-11-26 19:40 郑龙天 阅读(626) 评论(0) 推荐(0)
摘要:问题: 如何能够在 n×n 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。 分析: 我们可以用一串数字来表示问题的解,比如[2,4,1,3] 表示 4×4 棋盘的4皇后问题的解,第一行的棋子摆在第2列;第二行的棋 阅读全文
posted @ 2016-11-26 19:37 郑龙天 阅读(9202) 评论(1) 推荐(1)
摘要:问题: 旅行商从 a 开始周游下图所有的城市一次,然后回到 a,城市之间的旅行代价在图中标明。 请选择一个最优的行走顺序使得周游所有城市的代价最小。 思路: 随便怎么周游,对于一个城市来说,一定有一条进的路和一条出的路。 对于每个城市来说,暂时都选取代价最小的两条路来作为理想的路线,就算这些路不合理 阅读全文
posted @ 2016-11-19 13:37 郑龙天 阅读(21990) 评论(4) 推荐(2)
摘要:问题&数据输入&数据输出: 分析: 首先将任务按其截止时间非减序排序。 对任务 1 , 2 , …… , i,如果截止时间为 d ,则最小误时惩罚为 p( i , d ) 。 其中 p( i , d ) = min{ p(i-1, d)+wi , p(i-1, min{d, di}-ti) } p( 阅读全文
posted @ 2016-11-10 21:43 郑龙天 阅读(4647) 评论(0) 推荐(0)
摘要:问题: 假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。 (这个问题实际上是著名的图着色问题。若将每一个活动作为图的一个顶点,不相容活动间用边相连。使相邻顶点有不同颜色的最小着色数,相应于要找的最小会场数。) 数据输入: 第一行表示有 n 个活动。 接下来 n 行中,第 i 行的第一个 阅读全文
posted @ 2016-11-09 21:56 郑龙天 阅读(3209) 评论(0) 推荐(0)
摘要:分析: 从题目中我们可以看到几个有用的量:x串的长度m,y的长度n 那么我们就可以用r[m][n]表示长度为m的串x和长度为n的串y的最长公共子序列的长度 问题一般化了就是:r[i][j]表示长度为i的串和长度为j的串的最长公共子序列的长度 然后递归地定义解就可以表示成: 而反递归的动态规划的做法就 阅读全文
posted @ 2016-11-07 20:01 郑龙天 阅读(114) 评论(0) 推荐(0)
摘要:问题: 给定n种物品和一背包。物品 i 的重量是 wi ,其价值是 vi ,背包的容量为 c 。 对于一件物品,只有装或者不装,因此该问题称为 0-1背包问题。 问如何选择装入背包中的物品,使得装入背包中的物品总价值最大。 分析: 从题目中可以提取出这几个家伙:物品集合{n种物品 : 1 2 3 … 阅读全文
posted @ 2016-11-05 23:07 郑龙天 阅读(293) 评论(0) 推荐(0)
摘要:动态规划算法的基本思想时将问题分解成多层个子问题。先求解子问题并将其记录,然后自底向上,从这些子问题求得原问题的解。 如果用递归来求解的话,是自顶向下来求解的,动态规划和它相反,也就是说递归怎么来,动态规划就逆着来。 求解动态规划的问题一般分这几个步骤: 1.找出最优解的性质,并刻画其结构特征(从题 阅读全文
posted @ 2016-11-05 22:24 郑龙天 阅读(223) 评论(0) 推荐(0)
摘要:问题: 给定一个由n行数字组成的数字三角形,如下图所示: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大(每一步只能从一个数走到下一层上和它最近的左边的数或者右边的数)。 输入: 第一行是数字三角形的行数,接下 阅读全文
posted @ 2016-10-30 21:09 郑龙天 阅读(12687) 评论(0) 推荐(2)
摘要:问题: 定义于字母表∑{a,b,c)上的乘法表如表所示: 依此乘法表,对任一定义于∑上的字符串,适当加括号表达式后得到一个表达式。 例如,对于字符串x=bbbba,它的一个加括号表达式为(b(bb))(ba)。依乘法表,该表达式的值为a。 试设计一个动态规划算法,对任一定义于∑上的字符串x=x1x2 阅读全文
posted @ 2016-10-30 16:09 郑龙天 阅读(4468) 评论(1) 推荐(0)
摘要:问题: 长江游艇俱乐部在长江上设置了n个游艇出租站1,2,3…,n。 游客可以在这些游艇出租站用游艇,并在下游的任何一个游艇出租站归还游艇。 游艇出租站i到游艇出租站j之间的租金为r(i,j),1<=i<j=n。 试设计一个算法,计算从游艇出租站1到出租站n所需的最少租金。 数据输入: 第一行表示有 阅读全文
posted @ 2016-10-30 15:16 郑龙天 阅读(10686) 评论(3) 推荐(1)