分级组合(排列)法
MSilver
发现一些看似无关的问题其实可以用统一的算法思想去解决总之本博客关注1.效率更高或者2.形式更简洁或者3.方法的解释更易懂相同算法不同思想的一些解决方法当然是相比所能搜集到的现有方法而言
展开
-
数组分割
问题 一个2n的整数数组,分成n元素两组,保证两组和之差的绝对值最小,设计算法,保证两组和之差的绝对值最小。 分析 在2n个整数,计算1~n级情况,规则为“求和”。 解法一 使用n个哈希表来保存每一级所有的和情况,以排除重复: for (int k = 1; k <= 2 * n; k++)//计算依次拿出1、2、3...个元素的情况 { var m = Math.Min(原创 2013-06-29 23:28:49 · 434 阅读 · 0 评论 -
一种简单而神奇的算法思路:分级组合(排列)法
在琢磨一些算法题的过程中,发现很多题目其实可以用同一种思路去解决:假设有n个元素数组,挨个取出所有元素,计算当取出0个,1个,2个…n个元素的情况下,数组中任意0个,1个,2个…n个元素所能组合(或排列)出的情况(或个数)。 例如:求1,2,3这几个数求和能得到的数字: 0级: 0 1级: 1,2,3 2级: 3,4,5 3级: 6 取出元素原创 2013-06-29 11:47:27 · 1044 阅读 · 0 评论 -
卡特兰数(Catalan)
问题 《编程之美》中提到了“买票找零”问题,查阅了下资料,此问题和卡特兰数Cn有关,其定义如下: 卡特兰数真是一个神奇的数字,很多组合问题的数量都和它有关系,例如: 1. Cn = 长度为2n的Dyck words的数量。Dyckwords是由n个X和n个Y组成的字符串,并且从左往右数,Y的数量不超过X,例如长度为6的Dyck words为: XXXYYY XY原创 2013-07-01 19:51:05 · 550 阅读 · 0 评论