求n个元素的全排列的所有解可以用减治法:每次拎出一个数做前缀,对剩下的元素再求全排列,直至只剩一个元素。代码源自《算法分析与设计(王晓东)》,复杂度O(n2) 1 //输出k~m的所有全排列 2 void perm(int k,int m) 3 { 4 if(k==m) 5 { 6 ...
分类:
其他好文 时间:
2015-10-09 07:02:37
阅读次数:
269
核心数学式:f(n) = f(n-1) + F; 应用:插入排序;生成排序/子集f(n) = f(n/2) + F; 应用:假币问题;俄式乘法f(n) = f(n-k) + F; 应用:查找第k大/小的元素实现思路:考虑对于元素数量为n的集合的执行结果,如何用数量为n-1、n/2或者n-...
分类:
其他好文 时间:
2015-07-28 10:37:27
阅读次数:
159
对于生成{1,……,n}的所有n!个排列的问题,我们可以利用减治法,该问题的规模减一就是要生成所有(n-1)!个排列。假设这个小问题已经解决了,我们可以把n插入到n-1个元素的每一种排列中的n可能的位置中去,来得到较大规模大问题的一个解。按照这种方式生成的所有排列都是独一无二的,并且他们的总数应.....
分类:
编程语言 时间:
2015-04-09 21:21:38
阅读次数:
330
题目描述:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。思路:我们可以使用分治法或者减治法来处理这个问题。分治法 目标:把1个大问题分成2个小问题,2个小问题还可以再分,直到问题规模小的可....
分类:
编程语言 时间:
2015-02-03 19:07:06
阅读次数:
210
/** * 获得连续子数组的最大和 * * @author dfeng * */ private
static long getMax(long a, long b) { return a > b ? a : b; } /** *
获得连续子数组的最大和 * * @param array ...
分类:
其他好文 时间:
2014-06-07 21:21:30
阅读次数:
241
package chap04_Divide_And_Conquer;import static
org.junit.Assert.*;import java.util.Arrays;import org.junit.Test;/** * 算反导论第四章
4.1 最大子数组 * * @author ....
分类:
其他好文 时间:
2014-06-07 20:21:38
阅读次数:
212
分治法(Divide and Conquer)的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的几个相似问题,以便各个击破,分而治之。...
分类:
其他好文 时间:
2014-05-11 15:11:22
阅读次数:
612
利用减治法实现8枚硬币问题:参考资料:http://blog.csdn.net/wwj_748/article/details/8863503
算法设计--八枚硬币问题 1 #include "stdafx.h" 2 #include 3 #include 4 using namespace ...
分类:
其他好文 时间:
2014-04-29 18:18:17
阅读次数:
510