コンビネーションソートアルゴリズムの定理
2112 ワード
くりかえしくみたて
1.配列からインデックスを選択し、1を減算して再度呼び出す
2.インデックスが1の場合、各要素は配列として返されます.
3.戻り値を1から選択した値とマージ
くりかえしくみたて
1.配列から1つを選択し、配列とインデックスから1を減算して、再度呼び出します.
2.インデックスが1の場合、各要素は配列として返されます.
3.戻り値を1から選択した値とマージ
コンポジットコード
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
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つを選択し、配列とインデックスから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
Reference
この問題について(コンビネーションソートアルゴリズムの定理), 我々は、より多くの情報をここで見つけました https://velog.io/@star-ho/조합-순열-알고리즘-정리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol