图像压缩算法构造最优解c语言,C语言与程序设计第12章递归.ppt

C语言与程序设计The C Programming Language ;本章讲授内容;12.1 递归概述;【例12.1】 用递归法计算阶乘n!;计算4!的递归执行过程;递归的两个要素;递归算法的特点;12.2 递归函数设计;12.2.1 字符串的递归处理;【例12.2】 用递归实现标准库函数strcmp(s,t);;12.2.2 汉诺塔问题;【例12.3】 设计一个求解汉诺塔问题的算法。;函数move(n,a,b,c);12.2.3 排列问题;【例12.4】 找出从1~n中任取m个数的所有排列;函数PrintPerm(a,n,m,cur);12.3 分治法与快速排序;【例12.5】 用quick排序算法对整数排序;实现快速排序的函数QuickSort;QuickSort分析;QuickSort分析;分解数组的函数partition;partition分析;切分元素的选择;12.4 回溯法;12.4.1 解空间与算法步骤;深度优先搜索整个解空间;剪枝函数;递归回溯;backtrace分析;12.4.2 0-1背包问题;0-1背包问题的解空间;0-1背包问题的约束函数;【例12.6】 编程实现0-1背包问题的回溯算法。;12.4.3 装载问题;装载问题;【例12.7】 使用回溯法求出最优装载方案;程序分析;12.5 动态规划;12.5.1 动态规划算法的基本步骤;设计动态规划的实际步骤;12.5.2 0-1背包问题的动态规划算法;0-1背包问题的子问题为“选择第i件及其后的物品放入容量为j的背包”,可描述如下:;2.最优值的递归定义;3.计算最优值;计算最优值的递归函数;4.构造一个最优解;/* 根据最优值构造并输出最优方案 */void PrintAns(int c,int n){ int i; for( i = 1; i < n; i++){ if(d[i][c]==d[i+1][c] ) x[i]=0; else { x[i]=1; c-=w[i]; }} x[n]=(d[n][c]>0)?1:0; for( i = 1; i <= n; i++) printf("%5d",x[i]);printf("\n");};【例12.8】 编写用动态规划法求解 0-1背包问题的程序;12.5.3 挖地雷问题;【例12.9】 编程求解挖地雷问题,输出挖地雷的顺序和挖到的地雷数量;(2)地窖之间联系的表示:地窖之间的联系可用二维数组a表示,a[i][j]表示第i个地窖与第j个地窖之间是否有通路,a[i][j]为1表示从地窖i到地窖j有通路,a[i][j]为0表示无通路。

(3)子问题为“从第i个地窖开始挖最多可以挖出的地雷数”,设其解为f(i)。地窖中地雷的数量可用一维数组w表示,w[i]为第i个地窖的地雷数,则从第i个地窖起可挖到的最大地雷数=该地窖本身的地雷+向后的最大的地雷数max,递归式如下:f(i)=w(i)+ max{ f(j)} (i

以4*4的棋盘为例进行分析,用树形结构表示马走的所有过程,求从起点到终点的路径,实际上就是从根结点开始深度优先搜索这棵树。马从(1,1)开始,按深度优先搜索法,走一步到达(2,3),判断是否到达终点,若没有,则继续向前走,再走一步到达(4,4),然后判断???否到达终点,若到达则退出,搜索过程结束。为了减少搜索次数,在马走的过程中,判断下一步所走的位置是否在棋盘上,如果不在棋盘上,则选择另一条路径再走。;深度优先搜索法与前面讲的回溯法差不多,用递归的方式使代码简化,也好说明

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值