Java教程

算法第五章上机实践报告

本文主要是介绍算法第五章上机实践报告,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1. 请用回溯法的方法分析“最小重量机器设计问题”

(1)回溯法要求要给出约束条件,总价格不超过c,设当前已选部件的重量和为cw,价格之和为cc.

(2)初始化供应商数量及部件数量,然后初始化部件的一些属性作为测试数据。程序关键点是中间变量的总价值取较小的那个,总重量与最小重量bestw的比对是否达到最小,最优。此问题属于类01背包问题,即在某个变量的限制条件下,另一个变量的最优值问题。

(3)首先考虑问题输出,应该为每个零件的供货商编号,如果设为x[i],则此算法最终输出为x[i]的遍历,其中i为第i件零件。
(4)考虑回溯法的解空间树,因为每个商品可以从m个供货商获得,则问题的解空间树是一棵m叉树,该树属于子集树而非排列树。
(5)考虑剪枝条件,此问题中的限制条件为价格上限c,最小重量设bestw,则当 当前价格<c 且 当前重量 < bestw时,执行树的深度遍历,否则,执行回溯,因此本问题中包含两个剪枝条件。
(6)最后是更新最优值,以及问题的解,本题中最优解是bestw,解集合是x[i]。递归出口处更新一种最优解,以及对应解集合。

1.1 说明“最小重量机器设计问题"的解空间

有n个零件与m个厂商,解空间是总价格不超过总重量和供应商的集合

1.2 说明 “最小重量机器设计问题"的解空间树

回溯法的解空间树,因为每个商品可以从m个供货商获得,则问题的解空间树是一棵m叉树,该树属于子集树。

1.3 在遍历解空间树的过程中,每个结点的状态值是什么

每个结点的状态应该是当前背包的价值和重量。

2. 你对回溯算法的理解

(1)回溯法

回溯算法是一种选优搜索法,按选优条件向前搜索,以达到目标。简单的说是在搜索过程中寻找问题的解,当发现已不满足求解条件时,就回溯返回,尝试别的路径。

当探索到某一步时,发现原先选择不是目前的最优解或不满足问题条件时,就退回一步重新选择,并减去当前步骤的节点对应的值,这种方法为回溯法。

(2)剪枝函数:

回溯已经走了这个步骤,走过处理的逻辑,当前节点的数据存在参与计算。退回上一步,则需要减去当前步骤的数据,编写去除这些节点数据的函数就是剪枝函数。

这篇关于算法第五章上机实践报告的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!