순열
let data = [1, 2, 3, 4]
let r = 2
function permutation(data, r) {
const result=[]
if(r===1){
return data.map(v=>[v])
}
for (let i = 0; i < data.length; i++) {
const main = data[i]
const sub = data.filter(v=>v!==data[i])
const permuteD = permutation(sub,r-1)
result.push(... permuteD.map((v)=>[main,...v]))
}
return result
}
const result = permutation(data,r)
console.log(...result,result.length)
중복순열
const data = [1, 2, 3, 4]
const r = 2
function permuteWithRepetition(data, r) {
const result=[]
if(r===1){
return data.map(v=>[v])
}
for (let i = 0; i < data.length; i++) {
const main = data[i]
const sub = data
const permuteR = permuteWithRepetition(sub,r-1)
result.push(...permuteR.map((v)=>[main,...v]))
}
return result
}
const result = permuteWithRepetition(data,r);
console.log(...result,result.length)
조합
const data = [1, 2, 3, 4]
const r = 2
function combination(data, r) {
const result=[]
if(r===1){
return data.map(v=>[v])
}
for (let i = 0; i < data.length; i++) {
const main = data[i]
const sub = data.slice(i+1)
const permuteR = combination(sub,r-1)
result.push(...permuteR.map((v)=>[main,...v]))
}
return result
}
let result = combination(data,r);
console.log(...result,result.length)
중복 조합
const data = [1, 2, 3, 4]
const r = 2
function combinationWithRepetition(data, r) {
const result=[]
if(r===1){
return data.map(v=>[v])
}
for (let i = 0; i < data.length; i++) {
const main = data[i]
const sub = data
let permuteR = combinationWithRepetition(sub,r-1)
result.push(...permuteR.map((v)=>[main,...v]))
}
return result
}
let result = combinationWithRepetition(data,r);
result=[...new Set(result.map(v=>JSON.stringify(v.sort())))].map(v=>JSON.parse(v))
console.log(...result,result.length)