可视化计算(raptor).docVIP

  • 68
  • 0
  • 约1.01千字
  • 约 8页
  • 2016-06-09 发布于安徽
  • 举报
可视化计算(raptor).doc

用动态规划来解决数字三角形问题 软件34刘柏呈 题目的出处是课本讲贪心的一道例题,选题的原因:一,老师要求用到动态规划的思想方法。二,raptor是个可视化的编程软件,突出可视化,就必须有图形,而数字三角形本身就是个“二叉树”综上先构图随即生成树数,完成输入问题。再用动态规划寻找最大的路径,最后再运用可视化的特点,把选择的过程呈现给看程序的人。 首先是构图,出于美观性的考虑,我将数字三角形的可行层数控制为1-6层。由于raptor没有编辑数组,所以我用两种方式为点编号:1,(i,j)来表示第i行第j个数。2,用m表示,从上到下,从左到右的第m个点。之后就是,计算点的坐标,找出坐标的规律,并适当的纪录。 动态规划,主要根据,状态转移方程:f[i,j]=max{f[i-1,j],f[i-1,j-1]}+c[i,j]其中,f[i,j]表示到(i,j)点的最大累加和,c[i,j]表示第(i,j)点的值。 显示用到递归的法,根据之前纪录的“父节点”来搜索路径。 第一个子图composition就是构图,用来画二叉树,i控制行数,j控制列数,二重循环来画圆和线。注意点:圆的大小应该适应画布和层数,所以我令k=画布高/层数,而用k/4作为半径画圆。 “线不能将圆戳破”即线的出发点不能是圆心,这里,我将上层圆的圆心与它的两个子圆的圆心连线的夹角令为60度,再根据圆中直角三角形的关系,算出对应圆周上的点,作为出发点。弄清一个循环中该做什么,结论是:画一个圆和两条线,这里要注意判断一下是否是最后一层,最后一层不需要画线。 dp子图是用来完成动态规划算法的,这个算法只要知道状态转移方程就比较好实现,需要注意的是边界的控制,所以需要附初值。还有就是,我每做一步用root数组纪录一下该点的“父亲”,以便之后查找。 maxchoose子程序用来比较大小,并返回一个o,帮助确定是“左”还是“右”被选了。 showresult和findroot就是用递归来回溯寻找自己“父节点的过程”次程序的缺点,就是编译过后已然极其的慢,但笔者没有找到“裁枝”的限制条件,希望看过此程序的读者能够发现。 Maxchoose子程序输入和输出的参数有必要加以说明。 Main子图 trigger子图 composition子图 trigger子图 DP子图 Maxchoose子程序 Showresult子图 Findroot子程序

文档评论(0)

1亿VIP精品文档

相关文档