`
changqingonly
  • 浏览: 25176 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

学习全排列算法

阅读更多
问题描述:将8个"车"放在8*8的国际象棋盘上,如果他们两两均不能互吃,那么称8个"车"处于一个安全状态。问共有多少种不同的安全状态?

解题思路:8个车处于安全状态当且仅当它们处于不同的8行8列上。用一个排列A1,A2,A3,....A8,对应一个安全状态,使A1表示第i行的A1列上放置一个"车"。这种对应显然是一对一的。因此,安全状态的总数等于这个数的全排列总数8!=40320。

程序实现思路:设F(N) = N!,由于N!=N*(N-1)....2*1;那么有递归方程式: F(N) = N*F(N-1);

public static List<StringBuffer> Pmin(char[] source, int len) {
		
		// 当前全排列的结果集合
		List<StringBuffer> currSet = new ArrayList<StringBuffer>();
		
		// 递归出口
		if(len == 1){
			currSet.add(new StringBuffer(String.valueOf(source[0])));
		    return currSet;	
		}
		
		List<StringBuffer> lstSet = null;
		// 取得(N-1)!=N-1的全排列 
		lstSet = Pmin(source, len - 1);
		
		//-----------------------------------------------------------------
		// 对(N-1)!得到的排列字符集合进行字符插入操作,得到N!
		//-----------------------------------------------------------------
		// 插入字符
		String currChar = String.valueOf(source[len - 1]); 
		
		for(int index = 0; index < lstSet.size(); index++){
			StringBuffer currSb = lstSet.get(index);
			for(int i = 0; i < currSb.length() + 1; i++){
				StringBuffer nxtSb = new StringBuffer(currSb);
				nxtSb.insert(i, currChar);
				currSet.add(nxtSb);
			}
		}
		
		return currSet;
	}


只可惜不能递归多层,10个字符的全排列就然JDK受不了。那位牛人知道这个实现的优化,请不吝指导。
分享到:
评论

相关推荐

    全排列算法实现(C)

    实现全排列组合的算法,供大家学习与参考。在需要对排列组合做差异分析的时候可以直接使用。例如:几个正则式的不同排列组合对匹配效果的影响

    使用javascript写的全排列算法演示(分为回溯法演示和交换法演示)

    大一时候使用javascript写的全排列算法演示(分为回溯法演示和交换法演示),既可以用来学习javascript,又可以用来加深对全排列算法的理解,有需要的朋友们可以下载~

    C语言实现全排列算法模板的方法

    主要介绍了C语言实现全排列算法模板的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    JAVA用递归实现全排列算法的示例代码

    主要介绍了JAVA用递归实现全排列算法的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下

    java算法分析与设计之全排列问题源代码

    java算法分析与设计之全排列问题源代码 算法作为计算机专业学生的必修课,同时也是软件开发过程中必备的编程思想,对学习研究计算机专业意义重大;正因为这门课程难,所以除了相关方面的书籍,网络资源少的可怜,尤其...

    如何通过python实现全排列

    这篇文章主要介绍了如何通过python实现全排列,文中通过示例代码介绍的...相关全排列算法: def perm(l): if(len(l)&lt;=1): return [l] r=[] for i in range(len(l)): s=l[:i]+l[i+1:] p=perm(s) for x in p:

    程序员编程艺术:面试和算法心得.pdf

    o 6.15 本章习题 第七章 机器学习 o 7.1 K 近邻算法 o 7.2 支持向量机 附录 更多题型 o 附录 A 语言基础 o 附录 B 概率统计 o 附录 C 智力逻辑 o 附录 D 系统设计 o 附录 E 操作系统 o 附录 F 网络协议

    旅行商问题(全排列)

    本算法是用全排列问题来解决旅行商问题,得到最小花费,同时记录最优路径。。属于暴利枚举,简单,容易理解。学会了这个,大家就可以学习回溯法的旅行商问题了。。

    数据结构和算法必知必会的50个代码实现

    * 编程实现一组数据集合的全排列 ## 排序 * 实现归并排序、快速排序、插入排序、冒泡排序、选择排序* 编程实现O(n)时间复杂度内找到一组数据的第K大元素 ## 二分查找 * 实现一个有序数组的二分查找算法* 实现模糊二...

    python3实现字符串的全排列的方法(无重复字符)

    最近在学一些基础的算法,发现我的数学功底太差劲了,特别是大学的这一部分,概率论、线性代数、高数等等,这些大学学的我是忘得一干二净(我当时学的时候也不见得真的懂),导致现在学习算法,非常的吃力。...

    《妙趣横生的算法(C语言实现)》(杨峰 编著)

    《妙趣横生的算法(C语言实现)》可作为算法入门人员的教程,也可以作为学习过C语言程序设计的人士继续深造的理想读物,也可作为具有一定经验的程序设计人员巩固和提高编程水平,查阅相关算法实现和数据结构知识的参考...

    algorithm:学习算法

    记录器算法学习2021-01-17 16:32:07动态规划-斐波那契数列2021-01-19 19:44:51动态规划-凑硬币回溯算法-全排列2021-01-20 16:50:49回溯算法N皇后2021-01-21 20:21:38 bfs -二叉树最小深度

    组合数学之EVEN法生成排列

    组合数学之EVEN法生成排列 学习组合数学的朋友可以参考一下

    基于C++实现的改进版遗传算法解决TSP问题源码+项目说明.zip

    该资源适合计算机相关专业(如人工智能、通信工程、自动化、软件工程等)的在校学生、老师或者企业员工下载,适合小白学习或者实际项目借鉴参考! 当然也可作为毕业设计、课程设计、课程作业、项目初期立项演示等。...

    python非递归全排列实现方法

    刚刚开始学习python,当前看到了函数这一节。结合数组操作,写了个非递归的全排列生成。原理是插入法,也就是在一个有n个元素的已有排列中,后加入的元素,依次在前,中,后的每一个位置插入,生成n+1个新的全排列。...

    leetcode跳跃-algorithm:我的算法知识学习

    我的算法知识学习 动态规划 整数拆分 leetcode 343 整数拆分 爬楼梯 leetcode 70 贪心算法 买股票2 leetcode 122 换酒问题 leetcode 1518 钞票支付问题 分糖果问题 leetcode 455 摇摆序列 leetcode 376 移掉k位数字 ...

    algorithm-[removed]用 JavaScript 实现的算法和数据结构。Algorithms and data structures implemented in JavaScript

    随笔记录学算法还有其他知识作为基础,其对应的目录下是学习资料以及总结。LeetCode 目录是刷题的记录,如果对应的题目下有同名的 MD 文件是对应的题解记录。学习方向算法文章刷题打卡71.简化路径|刷题打卡141.环形...

    基于改进SOINN算法的恶意软件增量检测方法

    首先对SOINN算法进行改进:在SOINN算法竞争学习周期内,根据全排列思想搜索所有样本输入次序下神经元的权重调节量,计算所有权重调节量的平均值作为神经元最终权重调节量,避免不同样本输入次序影响训练所得神经网络...

    study:学习积累,包括算法面试题、设计模式

    该项目用于积累学习中的问题,记录一些有效的代码,其中包括一些算法题、设计模式。 Author 小曾 E-mail 目录 矩阵顺序输出 喝汽水问题 数组全排列 工厂模式 抽象工厂模式 单例模式 建造者模式 原型模式 适配器模式 ...

    gasstationleetcode-algorithm:算法

    记录一下学习算法的一些代码。 冗余连接 II 全排列 II 左叶子之和 子集 把二叉搜索树转换为累加树 监控二叉树 合并二叉树 二叉搜索树中的众数 从中序与后序遍历序列构造二叉树 路径总和 II 二叉搜索树的最近公共祖先...

Global site tag (gtag.js) - Google Analytics