一种简单而神奇的算法思路:分级组合(排列)法
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
在此,可将由k个元素组合(或排列)出的情况称为“k级”的情况。对于不同的题目,“组合(或排列)”的“规则”可能不同,对于本题,规则是“求和”。
*注意,这里“排列”和“组合”的区别就是“规则”是否关注元素顺序。
思路很简单,却能解决很多问题(归类为此标签的所有问题)。此法核心在于:看上去象是在构建母集合的幂集(共有2n个),但是过程中常常可以排除大量重复情况,甚至只需要记录元素的个数,从而提高计算速度。
例如:求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 |
*注意,这里“排列”和“组合”的区别就是“规则”是否关注元素顺序。
思路很简单,却能解决很多问题(归类为此标签的所有问题)。此法核心在于:看上去象是在构建母集合的幂集(共有2n个),但是过程中常常可以排除大量重复情况,甚至只需要记录元素的个数,从而提高计算速度。
相关文章推荐
- 浅谈c语言中一种典型的排列组合算法
- PHP实现的简单排列组合算法应用示例
- 排列和组合简单的递归思路以及C++实现
- Python实现的简单排列组合算法示例
- 一种常见的数据挖掘的算法SPRINT算法的简单实现
- 算法-把n个数的每一种排列情况都列出来(排列组合)-全排列-字典序算法(一看就懂)
- java 高效率的排列组合算法(java实现)
- 蓝桥杯 算法训练 摆动序列 【排列组合 + DFS】
- java求组合排列算法
- A Simple In-Place Algorithm for In-Shuffle 一种简单的原地洗牌算法
- 排列 组合 算法(一)
- 朴素贝叶斯分类器--一种简单有效的常用分类算法
- C# 计算排列组合数,及列出所有组合形式的算法
- 高效率的排列组合算法
- 排列组合算法1:生成全部有序列
- 字符串的全排列和组合算法
- 一种简单、快速、高效的多边形减面算法
- 排列组合的一些算法
- ASP.NET MVC 2生成动态表单的一种最简单的思路
- 对一组数据做无序排列(组合)的简单实现