上一页 1 ··· 93 94 95 96 97 98 99 100 101 ··· 103 下一页
摘要: 多边形游戏是一个单人玩的游戏,开始时有一个由n个顶点构成的多边形。每个顶点被赋予一个整数值,每条边被赋予一个运算符“+”或“*”。所有边依次用整数从1到n编号。1 将一条边删除。2 随后n-1步按以下方式操作: (1)选择一条边E以及由E连接着的2个顶点V1和V2; (2)用一个新的顶点取代边E以及由E连接着的2个顶点V1和V2。将由顶点V1和V2的整数值通过边E上的运算得到的结果赋予新顶点。3 最后,所有边都被删除,游戏结束。游戏的得分就是所剩顶点上的整数值。思路:在所给多边形中,从顶点i(1≤i≤n)开始,长度为j(链中有j个顶点)的顺时针链p(i,j) 可表示为v[i],op[i+1.. 阅读全文
posted @ 2012-10-17 15:51 xingoo 阅读(634) 评论(0) 推荐(0)
摘要: 最大子段和:给出一个数组,计算其中连续的最大的子段和运行代码,及运行思想:/** * 动态规划:计算最大子段和 * 算法描述: * 数组a 有n个元素, 记 s[i] 为从a【0】到a[i]中,包含a[i]的最大子段和 * 则: s[i] 的值为: s[i-1]>0时, s[i-1]+a[i] * 否则 a[i] */#include <stdio.h>#include <stdlib.h>int maxSub(int *a, int n){ int i=0, max=0, max_pos = 0; int si_1=0, si = 0;/... 阅读全文
posted @ 2012-10-17 14:56 xingoo 阅读(463) 评论(0) 推荐(0)
摘要: 最长公共子序列问题:给定两个序列X={x1,x2,....xm}, Y={y1,y2,yn},找出XY的最长公共子序列1 最长公共子序列结构 1 xm=yn,则zk = xm = yn,且zk-1是xm-1和yn-1的最长公共子序列 2 xm!=yn,zk!=xm,则Z是xm-1,yn的最长共公共子序列 3 xm!=yn,zk!=yn,则Z是xm,yn-1的最长公共子序列2 子问题的递归结构 1xm=yn时,找出xm-1,yn-1的最长公共子序列 2 xm!=yn时,找出xm 和 yn-1 或者 xm-1和yn的最长公共子序列3 计算最优值c[i][j]:存储xi,yj的... 阅读全文
posted @ 2012-10-17 14:29 xingoo 阅读(505) 评论(0) 推荐(0)
摘要: 动态规划性质: 1 最优子结构性质 2 子问题重叠性质 ----->该问题可用动态规划算法求解的基本要素1 最优子结构当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构性质。最优子结构性质提供了该问题的可用动态规划算法求解的重要线索。动态规划,利用问题的最优子结构性质,以自底向上的方式递归的从子问题的最优解逐步构造出整个问题的最优解。2 重叠子问题动态规划,避开了递归时,重复的计算相同子问题的过程,对每个子问题只解一次,而后将其保存在一个表格中,当再次需要的时候,只是简单的用常数时间查看一下结果。3 备忘录方法递归方式自顶向下首先,查看其相应的记录项,若存在,直接返回。若不存 阅读全文
posted @ 2012-10-16 21:43 xingoo 阅读(9417) 评论(0) 推荐(0)
摘要: 矩阵AB可乘的条件是矩阵A的列数等于矩阵B的行数计算时,加括号方式,对计算量的影响很大穷举搜索法:来搜索可能的计算次序,并计算出每一种计算次序相应需要的数乘次数,从中找出一种数乘最少的计算次序 1 分析最优解的结构 关键特征:计算A[1:n]的最优次序所包含的计算矩阵子链A[1:k]和 A[k+1:n]的次序也是最优的。 2 建立递归关系 当i=j时:m[i][j] = 0;当i<j时,m[i][j] = m[i][k]+ m[k+1][j]+pi-1pkpj ... 阅读全文
posted @ 2012-10-16 21:19 xingoo 阅读(497) 评论(0) 推荐(0)
摘要: 基本思想:将待求解问题分解成若干子问题,先求解子问题,然后从子问题的解中得到原问题的解。与分治不同的是,经分解得到的子问题往往不是互相独立的。若用分治法来解这些问题,则得到的子问题数目太多,以至于最后解决原问题需要消耗指数时间。步骤设计:1 找出最优解的性质,并刻画其结构特征2 递归地定义最优值3 以自底向上的方式计算出最优值4 根据计算最优值得到的信息,构造最优解应用实例:矩阵连乘问题最长公共子序列最大子段和凸多边形最优三角剖分多边形游戏图像压缩电路布线流水作业调度背包问题最优二叉搜索树 阅读全文
posted @ 2012-10-16 20:32 xingoo 阅读(262) 评论(0) 推荐(0)
摘要: 算法思想:对于输入的子数组a[p:r],按下面三个步骤:1 分解:以a[p]为基准元素将a[p:r]分成三段,a[p:q-1],a[q],a[q+1:r],使a[p:q-1]中的任何元素都小于a[q],a[q+1:r]中的任何元素都大于a[q]2 递归求解:递归的对a[p:q-1],a[q+1:r]再进行排序3 合并:就地排序,不需要执行任何计算,便完成排序template <class Type>void QuikSort(Type a[],int p,int r){ if(p<r) { int q = Partition(a,p,r); QuikSo... 阅读全文
posted @ 2012-10-16 20:23 xingoo 阅读(291) 评论(0) 推荐(0)
摘要: 分治算法:用分治策略实现n个元素进行排序的方法。基本思想:将待排序元素分成大小大致相同的两个子集合,分别对两个子集合进行排序,最终排好序的子集合合并成所要求的排好序的集合。源码:/* * mergeSort.cpp * 合并排序算法,算法导论P.17 * Created on: 2011-12-21 * Author: LiChanghai *///#include <iostream>#include <vector>#include <iostream>#include <iterator>using namespace std;#defin 阅读全文
posted @ 2012-10-15 22:29 xingoo 阅读(520) 评论(0) 推荐(0)
摘要: 大整数乘法 分析算法计算复杂性时,加法乘法当做基本运算来处理,即一次加法或者乘法当做一个仅取决于计算机硬件处理速度的常数。正常的二进制整数X,Y要用O(n2)才能算出。如果分割为两段,X=A2^(n/2)+B,Y=C2^(n/2)+D。XY = (A2^(n/2)+B)(C2^(n/2)+D)=AC2^n+(AD+BC)2^(n/2)+BD要进行4次N/2位整数... 阅读全文
posted @ 2012-10-15 21:52 xingoo 阅读(1707) 评论(0) 推荐(0)
摘要: 分治法的基本思想:将一个规模为n的问题,分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。递归的解这些子问题,然后将各个子问题的解合并得到原问题的解。经典例子:二分搜索算法基本思想:1 将n个元素分成个数大致相同的两半,取n/2与x进行比较。2 如果找到,则终止,返回。3 如果小于n/2,则在小半部分继续查找。4 如果大于n/2,则在大半部分继续查找。算法描述代码:#include <iostream>using namespace std;template <class Type>int BinarySearch(Type a[],const Type & 阅读全文
posted @ 2012-10-15 21:18 xingoo 阅读(780) 评论(0) 推荐(0)
上一页 1 ··· 93 94 95 96 97 98 99 100 101 ··· 103 下一页