`

全排列算法

 
阅读更多

方法一:

 

将n的全排列转化为n-1的全排列,递归完成:

 

  
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
  
/** 
 * <p> 
 * Title:全排列算法 
 * </p> 
 * 
 */  
public class AllSort {  
    //将NUM设置为待排列数组的长度即实现全排列  
    private static int NUM = 4;  
  
    private static void sort(List datas, List target) {  
        if (target.size() == NUM) {  
            for (Object obj : target)  
                System.out.print(obj);  
            System.out.println();  
            return;  
        }  
        for (int i = 0; i < datas.size(); i++) {  
            List newDatas = new ArrayList(datas);  
            List newTarget = new ArrayList(target);  
            newTarget.add(newDatas.get(i));  
            newDatas.remove(i);  
            sort(newDatas, newTarget);  
        }  
    }  
  
    public static void main(String[] args) {  
        String[] datas = new String[] { "a", "b", "c", "d" };  
        sort(Arrays.asList(datas), new ArrayList());  
    }  
  
}  

 方法二,dfs深度遍历,利用数组记录访问历史,无需像上例动态remove链表

 

public class DfsFullSort {
	private int[] a = {1,2,3};
	private boolean[] vis = {false,false,false};
	private int n = 3;
	
	public static void main(String[] args) {
		DfsFullSort sort = new DfsFullSort();
		sort.dfs(0,"");
	}

	private void dfs(int step,String s) {
		if (step == a.length) {
			System.out.println(s);
			return;
		}
		for (int i = 0; i < n; i++) {
			if (!vis[i]) {
				vis[i] = true;
				String t =s;
				s = s + a[i];
				dfs(step + 1,s);
				s= t;
				vis[i] = false;
			}
		}
	}
}
分享到:
评论

相关推荐

    全排列算法C语言超简洁

    自己写的基于字符的全排列算法,代码简洁,高效,7位数的全排列都是秒排!用到了广度优先排列,深度优先搜索和几个递归,唯一没完成的是退出时释放内存,呵呵,破解密码时超有用的哟,,

    全排列算法解析(完整版)

    全排列算法广泛应用于程序设计中,尤其是在需要穷举所有可能性的场合,比如组合数学、游戏设计、密码学等领域。 在C或C++中实现全排列算法,主要的思想是递归。基本步骤是首先固定第一个元素,然后对剩余的n-1个...

    全排列算法部分算法需要自己优化修改

    全排列算法是计算机科学中一个基础且重要的问题,它涉及到数组或序列的所有可能的线性排列方式。在处理这个问题时,我们通常会采用递归或迭代的方式来实现。下面将详细介绍全排列算法及其优化方法。 全排列算法的...

    全排列算法解析(完整版)

    ### 全排列算法解析 #### 1. 全排列的定义和公式 全排列是指从一个包含`n`个不同元素的集合中选取全部`n`个元素,并按一定顺序排列形成的不同序列总数。数学上,`n`个不同元素的全排列数记为`n!`(`n`的阶乘),即...

    彻底理解全排列算法

    全排列算法: 比如字符串abc,全排列结果为abc,acb,bac,bca,cba,cab。

    全排列算法实现(java\c#\c++,各种主流语言版本)

    全排列算法是计算机科学中的一种基础算法,它用于找出给定集合的所有可能的排列组合。在本例中,我们将讨论如何使用递归方法实现全排列,以Java、C#、C++等主流编程语言为例。 全排列算法的核心思想是通过递归地...

    全排列算法 全排列算法 (c#版)

    全排列算法是计算机科学中一个基础且重要的概念,特别是在算法设计和分析中。它涉及到将一个给定的有限序列的所有可能的元素排列情况进行列举。在C#编程语言中,实现全排列算法可以帮助开发者解决多种问题,例如组合...

    全排列算法 实例 一种实现了n个数全排列的算法

    全排列算法是计算机科学中一个基础且重要的概念,主要用于生成一组数据的所有可能的排列组合。在实际应用中,它常用于解决各种优化问题、搜索问题和组合数学问题。本实例将详细阐述一种实现n个数全排列的算法。 ...

    组合数学全排列算法(转)

    根据提供的信息来看,实际文章内容并未直接包含关于组合数学中的全排列算法的详细解析,而是主要介绍了清华大学计算机科学与技术系的一些活动与新生入学情况。不过,既然题目要求围绕组合数学中的全排列算法进行展开...

    全排列算法实现(C)

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

    C语言实现的全排列算法

    全排列算法是计算机科学中一个基础且重要的概念,特别是在算法设计和组合数学中。全排列是指从n个不同元素中取出m个元素,按照一定的顺序排列的所有可能的组合方式。在本例中,我们讨论的是使用C语言实现的全排列...

    objective-c数组全排列算法

    在处理某些问题时,如生成所有可能的组合或者解决排列组合问题,全排列算法是必不可少的工具。全排列指的是从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排列起来,所有的排列情况就构成了全排列。 ...

    Python字符串的全排列算法实例详解

    ### Python字符串的全排列算法实例详解 #### 一、引言 在计算机科学中,全排列问题是一个常见的问题,尤其在解决密码学、组合优化等领域时尤为重要。全排列指的是从给定的一些元素中取出全部元素进行排列的方式。...

    组合数学全排列算法

    实现了字典序法、递增进位制数法、递减进位制数法、邻位对换法四种全排列算法。全排列算法有很多种,这里只是其中的一些,可以调试运行比较一下各种算法的效率。(该代码为初级版本,注重算法的实现,在交互方面需要...

    利用中介数实现全排列算法

    利用中介数实现全排列算法,采用java实现。

    全排列算法设计分析.ppt

    全排列算法设计分析主要关注如何生成一个序列中所有可能的不同排列。全排列是指从n个不同元素中取出m个元素,按照一定的顺序排列起来,所有可能的排列方式组成的集合。这里我们将通过递归和迭代的方式来解析这个过程...

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

    全排列算法是计算机科学中的一种基础算法,它用于找出一个给定序列的所有可能排列组合。在本案例中,我们关注的是使用JavaScript实现全排列的方法,包括回溯法和交换法。这两种方法都是解决全排列问题的有效策略,...

    排列组合的全排列算法(交换算法)

    全排列算法是计算机科学中处理数组或集合的一种经典方法,主要应用于组合数学和算法设计领域。在本场景中,我们关注的是"交换算法",它用于生成一个给定数组的所有可能排列。全排列是指从n个不同元素中取出m个元素...

Global site tag (gtag.js) - Google Analytics