JavaScript 전체 배열 의 6 가지 알고리즘 이 구체 적 으로 실현 되 었 습 니 다.

전체 배열 은 시간 복잡 도:O(n!)의 알고리즘 은 이틀 전에 학생 들 에 게 강 의 를 했 는데 본의 아니 게 이 문 제 를 생각 하고 돌아 와 서 총 결 했 습 니 다.7 가지 알고리즘 으로 풀 수 있 습 니 다.그 중에서 동태 순환 은 역 추적 알고리즘 과 유사 하여 실현 하기 가 비교적 번 거 롭 기 때문에 6 가 지 를 정리 하여 독자 들 의 요구 에 부 응 할 수 있 습 니 다.모든 알고리즘 은 자바 스 크 립 트 로 작 성 됩 니 다.직접 실행 할 수 있 습 니 다.알고리즘 1:교환(재 귀)

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>Full Permutation(Recursive Swap) - Mengliao Software</title> 
</head> 
<body> 
<p>Full Permutation(Recursive Swap)<br /> 
Mengliao Software Studio - Bosun Network Co., Ltd.<br /> 
2011.05.24</p> 
<script type="text/javascript"> 
/* 
( )  
1、 ; 
2、 ( ); 
3、 。 
*/
function swap(arr,i,j) { 
    if(i!=j) { 
        var temp=arr[i]; 
        arr[i]=arr[j]; 
        arr[j]=temp; 
    } 

var count=0; 
function show(arr) { 
    document.write("P<sub>"+ ++count+"</sub>: "+arr+"<br />"); 

function perm(arr) { 
    (function fn(n) { // n  
        for(var i=n;i<arr.length;i++) { 
            swap(arr,i,n); 
            if(n+1<arr.length-1) // 1  
                fn(n+1); // n+1  
            else
                show(arr); //  
            swap(arr,i,n); 
        } 
    })(0); 

perm(["e1","e2","e3","e4"]); 
</script> 
</body> 
</html>
알고리즘 2:링크(재 귀)

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>Full Permutation(Recursive Link) - Mengliao Software</title> 
</head> 
<body> 
<p>Full Permutation(Recursive Link)<br /> 
Mengliao Software Studio - Bosun Network Co., Ltd.<br /> 
2012.03.29</p> 
<script type="text/javascript"> 
/* 
( )  
1、 , ( ); 
2、 ( ); 
3、 ( ); 
4、 2、3, , 。 
*/
var count=0; 
function show(arr) { 
    document.write("P<sub>"+ ++count+"</sub>: "+arr+"<br />"); 

function perm(arr) { 
    (function fn(source, result) { 
        if (source.length == 0) 
            show(result); 
        else
            for (var i = 0; i < source.length; i++) 
                fn(source.slice(0, i).concat(source.slice(i + 1)), result.concat(source[i])); 
    })(arr, []); 

perm(["e1", "e2", "e3", "e4"]); 
</script> 
</body> 
</html>
알고리즘 3:역 추적(재 귀)

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>Full Permutation(Recursive Backtrack) - Mengliao Software</title> 
</head> 
<body> 
<p>Full Permutation(Recursive Backtrack)<br /> 
Mengliao Software Studio - Bosun Network Co., Ltd.<br /> 
2012.03.29</p> 
<script type="text/javascript"> 
/* 
( )  
1、 , , ; 
2、 , n ; 
3、 n 。 
*/
var count = 0; 
function show(arr) { 
    document.write("P<sub>" + ++count + "</sub>: " + arr + "<br />"); 

function seek(index, n) { 
    if (n >= 0) // ,  
        if (index[n] < index.length - 1) { //  
            index[n]++; //  
            if ((function () { //  
                for (var i = 0; i < n; i++) 
                    if (index[i] == index[n]) return true; //  
                return false; //  
            })()) 
                return seek(index, n); //  
            else
                return true; //  
        } 
        else { // ,  
            index[n] = -1; //  
            if (seek(index, n - 1)) //  
                return seek(index, n); //  
            else
                return false; //  
        } 
    else
        return false; 

function perm(arr) { 
    var index = new Array(arr.length); 
    for (var i = 0; i < index.length; i++) 
        index[i] = -1; // -1, ++ 0 
    for (i = 0; i < index.length - 1; i++) 
        seek(index, i); // n-1  
    while (seek(index, index.length - 1)) { // n ,  
        var temp = []; 
        for (i = 0; i < index.length; i++) //  
            temp.push(arr[index[i]]); 
        show(temp); 
    } 

perm(["e1", "e2", "e3", "e4"]); 
</script> 
</body> 
</html>
알고리즘 4:역 추적(비 재 귀)알고리즘 5:정렬(비 재 귀)알고리즘 6:모델 링(비 재 귀)위의 6 가지 알고리즘 중 일 부 는 위 치 를 배열 하 는 것 이다.예 를 들 어 역 추적,정렬 등 이다.배열 요 소 는 반드시 숫자 나 알파벳 등 이 아니 라 다양한 유형의 요소 에 적응 할 수 있 기 때문이다.

좋은 웹페이지 즐겨찾기