Java实现排列组合算法
来源:互联网 发布:淘宝宝贝照片尺寸 编辑:程序博客网 时间:2024/05/20 03:41
用Java实现排列算法:
package Sort;import java.util.ArrayList;import java.util.List;public class Arrange {public static void main(String[] args) {Arrange arrange = new Arrange();List<Character> data = new ArrayList<Character>();data.add('a');data.add('b');data.add('c');data.add('d');//输出A(n,n)的全排列for(int i = 1; i <= data.size(); i++)arrange.arrangeSelect(data,new ArrayList<Character>(),i);}/** * 计算A(n,k) * * @param data * @param target * @param k */public <E> void arrangeSelect(List<E> data,List<E> target, int k) {List<E> copyData;List<E> copyTarget;if(target.size() == k) {for(E i : target) System.out.print(i);System.out.println();}for(int i=0; i<data.size(); i++) {copyData = new ArrayList<E>(data);copyTarget = new ArrayList<E>(target);copyTarget.add(copyData.get(i));copyData.remove(i);arrangeSelect(copyData, copyTarget,k);}}}
</pre><pre name="code" class="java">Java实现组合算法
package Sort;import java.util.ArrayList;import java.util.Iterator;import java.util.List;/** * 求在M中找出N的排列数 * 算法思想:递归 * eg:abcd的全排列结果分别为:a,b,c,d,ab,ac,ad,bc,bd,cd,abc,abd,acd,bcd,abcd * 可以看出,当求N位的组合数时,可以先固定前N-1位,然后在匹配最后一位可行值;以此类推可用递归的方法求出所有可能的值。 * * @author YHYR * */public class Combine {public static void main(String[] args) {List<Character> data = new ArrayList<Character>();data.add('a');data.add('b');data.add('c');data.add('d');Combine t = new Combine();for(int i = 1; i < data.size(); i++)t.combinerSelect(data, new ArrayList<Character>(), data.size(), i);}/** * 步骤::每次递归时,把原始数据和满足条件的工作空间复制一份,所有的操作均在复制文件中进行,目的就是保证不破坏原始数据, * 从而可以让一轮递归结束后可以正常进行下一轮。 * 其次,把数据的第一个元素添加到工作空间中,判断工作空间的大小,如果小于k,则需要继续递归,但此时,传入递归函数的 * 参数需要注意:假设当前插入的节点的下标是i,因为是顺序插入的,所以i之前的所有数据都应该舍去,只传入i之后的未使用过的数据。 * 因此在传参之前,应该对copydata作以处理;当大于k的时候,则表明已经找到满足条件的第一种情况,然后只需修改该情况的最后一个结果即可。 * 如:找到abc时,则只需替换c为d即可完成该轮递归。 * * @param data原始数据 * @param workSpace自定义一个临时空间,用来存储每次符合条件的值 * @param kC(n,k)中的k */public <E> void combinerSelect(List<E> data, List<E> workSpace, int n, int k) {List<E> copyData;List<E> copyWorkSpace;if(workSpace.size() == k) {for(Object c : workSpace)System.out.print(c);System.out.println();}for(int i = 0; i < data.size(); i++) {copyData = new ArrayList<E>(data);copyWorkSpace = new ArrayList<E>(workSpace);copyWorkSpace.add(copyData.get(i));for(int j = i; j >= 0; j--)copyData.remove(j);combinerSelect(copyData, copyWorkSpace, n, k);}}}
1 0
- Java实现排列组合算法
- 【转】JAVA实现排列组合算法
- java排列组合算法代码实现
- java排列组合算法代码实现
- 高效率的排列组合算法(java实现)
- 排列组合算法总结(含Java实现)
- 排列组合算法总结(含Java实现)
- C#实现排列组合算法
- 排列组合算法实现
- java实现排列组合实现
- Java排列组合算法
- JAVA排列组合算法
- 排列组合递归算法 java
- java排列组合算法
- java排列组合算法
- 排列组合算法 java
- 排列组合算法(Java)
- java 高效率的排列组合算法(java实现)
- linux常用命令
- [Android测试] Android Studio+Appium+Java+Windows 自动化测试之二:Appium环境安装搭建
- Android Binder机制----实现自定义的系统服务
- 电波绕射
- 聊聊前端工程师的职业规划
- Java实现排列组合算法
- 单通道图像与三通道图像的memcpy()
- Ubuntu10.04 更新源 安装ia32-libs成功
- shiro @RequiresPermissions不起作用
- 在Openfire上弄一个简单的推送系统
- 替换空格
- Ext JS - renderer函数中各参数含义
- 学习添加引用(以JavaScriptSerializer序列化说明)
- SpringMVC详细示例实战教程