您的位置:首页 > 其它

一种简单而神奇的算法思路:分级组合(排列)法

2013-06-29 11:47 495 查看
在琢磨一些算法题的过程中,发现很多题目其实可以用同一种思路去解决:假设有n个元素数组,挨个取出所有元素,计算当取出0个,1个,2个…n个元素的情况下,数组中任意0个,1个,2个…n个元素所能组合(或排列)出的情况(或个数)。

例如:求1,2,3这几个数求和能得到的数字:

0级: 0

1级: 1,2,3

2级: 3,4,5

3级: 6

取出元素

1

2

3

0级

0

0

0

0

1级

1

1

2

1

2

3

2级

3

3

4

5

3级

6

在此,可将由k个元素组合(或排列)出的情况称为“k级”的情况。对于不同的题目,“组合(或排列)”的“规则”可能不同,对于本题,规则是“求和”。

*注意,这里“排列”和“组合”的区别就是“规则”是否关注元素顺序。

思路很简单,却能解决很多问题(归类为此标签的所有问题)。此法核心在于:看上去象是在构建母集合的幂集(共有2n个),但是过程中常常可以排除大量重复情况,甚至只需要记录元素的个数,从而提高计算速度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: