本博客(http://blog.csdn.net/livelylittlefish )贴出作者(阿波)相关研究、学习内容所做的笔记,欢迎广大朋友指正!
Content
附录 4 :再改进的方法的代码 weight3.1.c/3.2.c/3.3.c
附录 5 :再改进的方法的代码 weight3.1.c/3.2.c/3.3.c 的输出结果
附录 7 :一个更简单的方法的代码 weight5.1.c/5.2.c/5.3.c
11. 总结
本文首先给出各种答案 ,并从数学的角度分析该问题的分解方法 ( 第 2 节 ) ,且在第 3 节 给出一个纯数学的计算程序 weight1.c ,该方法使用若干个一维、二维、三维数组保存分解结果。该方法数组定义较多,如果加上别的条件,例如再多一次称量,很难扩展。
第 4 节 介绍了一种利用树型结构来保存称量过程 ( 分解结果 ) 的方法。比起第 3 节 数学的方法,该方法不需要那么多的数组定义, 其 数据结构统一、简单,且节省大量空间。但该方法也有缺点,例如,最终的正确解只有 5 个,但该方法同第 3 节 的数学方法一样,计算了所有的有结果的解,共 37 个,也比较浪费。
第 5 节 是第 4 节树型结构保存称量过程方法的改进版本,即对第 3 次分解结果进行判断,只有当该称量过程满足目标时,才建立节点,包括第 2 层和第 3 层的节点。这样,没有分解结果的节点 ( 包括第 2 层和第 3 层的节点 ) 就不会被建立, 其 叶子节点全部是正确的分解结果。问题更直观,且节省了空间 。
第 6 节 从直接计算满足目标的第 3 次称量出发,即第 2 次分解 ( 称量 ) 后,直接将满足目标的第 3 次称量解求出,判断这个计算出来的第 3 次称量所用的砝码是否在砝码组合内。如果在,表明该次称量过程为所求的正确解;否则,放弃,继续判断。 该方法直接计算满足目标的第 3 次分解,更好理解,也进一步简化了分解过程。
第 7 节 从不保存每一称量结果的角度出发,利用回溯法对该问题进行分析,并将回溯法转化为普通编程。相比较前面几节的方法,本节的方法更为简单,只需要 3 层嵌套调用即可求出全部的正确解,且无需保存每一次称量结果即可输出这些正确的解。逻辑简单、直观,实现也简单, 应该是首选的方法 。
第 8 节 从程序编译、运行等方面,讨论了本文所有例子程序的自动编译、自动运行并保存运行结果的方法。
第 9 节 简单讨论了该问题的扩展。第 10 节 简单讨论了笔者写作本文的体会。第 11 节 ,即本文最后一节总结全文及本文讨论的各种方法。
< 计算机算法设计与分析 >
砝码称重问题 ( 阿波 )
编写 makefile ( 阿波 )
驾驭 makefile ( 李云 )
跟我一起写 makefile ( 陈皓 )
经典算法( 1 )—— 8 皇后问题求解(回溯法) ( 阿波 )