JavaScriptシーケンスと組合せアルゴリズム


  • の組合せは配列からn個を選択し,順序が変わっても同じと見なす.
  • 順序は、配列の中からn個を選択して配列するものであり、順序が変わると他とみなされる.
  • JavaScriptコンビネーションアルゴリズム

    
    const combination = (arr, select) => {
        const answer = [];
        const dfs = (idx, num, tmp, visited) => {
            if(idx === arr.length){
                return;
            }
            if(num === 0){
                answer.push(tmp);
            }
            for(let i = idx; i < arr.length; i++){
                if(!visited[i]){
                    // 미방문
                    visited[i] = true;
                    dfs(i, num - 1, tmp.concat([arr[i]]), visited); // 선택
                    visited[i] = false;
                }
            }
        }
        const visited = new Array(arr.length).fill(false);
        dfs(0, select, [], visited);
        return answer;
    }
    
    const output = combination(["사과", "배", "귤"], 2); // 2개 선택
    console.log(output);
    
    出力値
    [ 
    	[ '사과', '배' ], 
        [ '사과', '귤' ], 
        [ '배', '귤' ] 
    ]

    JavaScriptソートアルゴリズム

    const permutation = (arr, select) => {
        const answer = [];
        const dfs = (num, tmp, visited) => {
            if(num === 0){
                answer.push(tmp);
            }
            for(let i = 0; i < arr.length; i++){
                if(!visited[i]){
                    // 미방문
                    visited[i] = true;
                    dfs(num - 1, tmp.concat([arr[i]]), visited); // 선택
                    visited[i] = false;
                }
            }
        }
        const visited = new Array(arr.length).fill(false);
        dfs(select, [], visited);
        return answer;
    }
    
    const output = permutation(["사과", "배", "귤"], 2); // 2개 선택
    console.log(output);
    出力値
    [
        [ '사과', '배' ],
        [ '사과', '귤' ],
        [ '배', '사과' ],
        [ '배', '귤' ],
        [ '귤', '사과' ],
        [ '귤', '배' ]
    ]