조합 순열 알고리즘 정리
중복조합
1. 배열에서 하나 선택후 인덱스를 1감소시킨후 다시호출
2. 인덱스가 1일경우 각 요소를 배열로 만들어 리턴
3. 리턴된 값을 1에서 선택한 값과 합침
중복조합
function perm(array, length) {
return array.flatMap((v, i) => length > 1
? perm(array, length - 1).map(w => [v, ...w])
: [[v]]
);
}
perm(['a', 'b', 'c', 'd', 'e'], 3).forEach(a => console.log(...a));
조합
1. 배열에서 하나 선택후 선택한 요소를 제외한 배열과 인덱스를 1감소시킨후 다시호출
2. 인덱스가 1일경우 각 요소를 배열로 만들어 리턴
3. 리턴된 값을 1에서 선택한 값과 합침
조합 코드
function comb(array, length) {
return array.flatMap((v, i) => length > 1
? comb(array.slice(i + 1), length - 1).map(w => [v, ...w])
: [[v]]
);
}
comb(['a', 'b', 'c', 'd', 'e'], 3).forEach(a => console.log(...a));
순열
const perm= function (arr, len) {
const results = [];
if (len === 1) return arr.map((value) => [value]); // 1개씩 택할 때, 바로 모든 배열의 원소 return
arr.forEach((fixed, index, origin) => {
const rest = [...origin.slice(0, index), ...origin.slice(index+1)] // 해당하는 fixed를 제외한 나머지 배열
const permutations = perm(rest, len - 1); // 나머지에 대해 순열을 구한다.
const attached = permutations.map((permutation) => [fixed, ...permutation]); // 돌아온 순열에 대해 떼 놓은(fixed) 값 붙이기
results.push(...attached); // 배열 spread syntax 로 모두다 push
});
return results; // 결과 담긴 results return
};
https://www.python2.net/questions-777952.htm
https://jun-choi-4928.medium.com/javascript%EB%A1%9C-%EC%88%9C%EC%97%B4%EA%B3%BC-%EC%A1%B0%ED%95%A9-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0-21df4b536349
Author And Source
이 문제에 관하여(조합 순열 알고리즘 정리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@star-ho/조합-순열-알고리즘-정리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)