砝码分盐问题——从数学和计算机的角度分析(11)

来源:互联网 发布:中国移动大数据硬件 编辑:程序博客网 时间:2024/05/06 12:54

本博客(http://blog.csdn.net/livelylittlefish )贴出作者(阿波)相关研究、学习内容所做的笔记,欢迎广大朋友指正!

 

 

Content

0. 问题

1. 一些方法

2. 从数学的角度分析

3. 能否编程计算?

4. 一个改进的方法

5. 再改进的方法

6. 能否直接计算求出所有正确解?

7. 一个更为简单的方法

8. 所有代码的自动编译、运行

9. 问题扩展

10. 体会

11. 总结

Reference

附录 1 :数学分解的代码weight1.c

附录 2 :数学分解程序weight1 的运行结果

附录 3 :树结构分解的代码weight2.c

附录 4 :再改进的方法的代码weight3.1.c/3.2.c/3.3.c

附录 5 :再改进的方法的代码weight3.1.c/3.2.c/3.3.c 的输出结果

附录 6 :直接计算正确分解的代码weight4.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节,即本文最后一节总结全文及本文讨论的各种方法。

 

Reference

<计算机算法设计与分析>

砝码称重问题 (阿波)

编写makefile (阿波)

驾驭makefile (李云)

跟我一起写makefile (陈皓)

经典算法(1)——8皇后问题求解(回溯法) (阿波)


上一节

思维题目, 树型结构, 砝码分盐

原创粉丝点击