์ ๋ ฅ ํฌ๊ธฐ์ ๊ฐ์ ๋ํด ๋จ์ ์ฐ์ฐ์ ๋ช ๋ฒ ์ํํ๋์ง ๊ณ์ฐํ์ฌ, ์๊ณ ๋ฆฌ์ฆ์ ์ํ ์๊ฐ์ ํ๊ฐํ๋ ๋ฐฉ๋ฒ
3๊ฐ์ง ์ ๊ทผ์ ํํ๋ฒ
O(๋น ์ค) : ์ต์ ์ ์ํฉ์ ๊ณ ๋ คํ์ฌ ์ฑ๋ฅ ์ธก์ ๊ฒฐ๊ณผํํ
function big_O(n){
let sum = 0;
sum = n *2;
return sum;
}
3 -> O(1)
function big_O(arr, n){
let sum = 0;
for(let i = 0 ; i < n; i++){
sum+= arr[i];
}
return sum;
}
n+2 -> O(N)
function big_O(arr, n){
let sum = 0;
for(let i = 0 ; i < n; i++){
for(let j = 0; j < n ; j++){
sum+= arr[i][j];
}
}
return sum;
}
nยฒ+2 -> O(Nยฒ)
n์ ํฌ๊ธฐ๊ฐ ์ปค์ง ์๋ก ๋๋ ค์ง๋ค
function big_O(arr, n){
let sum = 0;
for(let i = 0 ; i < n; i*=2){
sum+=2
}
return sum;
}
n/2+2 -> O(logN)
๋ณํฉ ์ ๋ ฌ, ๋ถํ ์ ๋ณตํ ๋ logN์ด ๋ง์ด ๋์จ๋ค
logN ๋ง์ผ๋ฉด ๋ง์ ์๋ก ํน์ ์ด์ ๊ฐ์ด ์์ฌ๋ผ๊ฐ๋ค
N ๋ณด๋ค ๋น ๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ง๊ณ ์๋ค.
ฮธ(์ธํ) : ํ๊ท ์ ์ธ ๊ฒฝ์ฐ์์์ ์ฑ๋ฅ ์ธก์ ๊ฒฐ๊ณผํํ
ฮฉ(์ค๋ฉ๊ฐ) : ์ต์ ์ ์ํฉ์ผ ๋์ ์ฑ๋ฅ ์ธก์ ๊ฒฐ๊ณผํํ
์๋ก ๋ค๋ฅธ n๊ฐ์ ์์ ์ค์์ r๊ฐ๋ฅผ ์ค๋ณต ์์ด ๊ณจ๋ผ ์์์ ์๊ด ์๊ฒ ๋์ดํ๋ ๊ฒฝ์ฐ์ ์(nPr)

let input = ["a", "b", "c"];
let count = 0;
// s: ์ง๊ธ ๋ฐ๊ฟ ์์น(=๊ณ ์ ํ ์๋ฆฌ), r : ๋ง์ง๋ง ๊ณ ์ ํ ์๋ฆฌ (์ฌ๊ธฐ์ 2 โ 0~2๊น์ง ์ด 3๊ฐ ์๋ฆฌ ๊ณ ์ )
function permutation(arr, s, r){
// 1. ์ฌ๊ทํจ์๋ฅผ ๋ฉ์ถฐ์ผํ ์กฐ๊ฑด
if(s == r){
count++;
console.log(arr.join(" "));
return;
}
// 2. ์ฌ๊ท๋ฅผ ๋๋ณ์ ๋ณ๊ฒฝ๋์ด์ผ ๋ ๋ถ๋ถ/๋ฉ์ธ๋ก์ง
for(let i = s; i < arr.length ; i++){
[arr[s], arr[i]] = [arr[i], arr[s]]; // swap
permutation(arr, s+1, r); // ์์ ์ ํ์ ์ฌ๊ทํจ์ ํธ์ถ
[arr[s], arr[i]] = [arr[i], arr[s]]; // swap ์์๋ณต๊ตฌ
}
/**
s r
0 2 i=0 ["a",]
1 2 i=1 ["a","b", ]
2 2 ["a","b","c"]
...
1 2 i=2 ["a","c",]
2 2 ["a","c","b"]
1 2 i=2 ["a","b",]
...
0 2 i=1 ["b","a","c"]
...
0 2 i=0 ["c",]
*/
}
permutation(input, 0, 2);
console.log(count)
--------------------------------------------------
OUTPUT
a b c
a c b
b a c
b c a
c b a
c a b
6
์๋ก ๋ค๋ฅธ n๊ฐ์ ์์์ค์์ r๊ฐ๋ฅผ ์ค๋ณต ์์ด ๊ณจ๋ผ ์์์ ์๊ด ์์ด ๋์ดํ๋ ๊ฒฝ์ฐ์ ์(nCr)

let input = [1,2,3,4]; // 4C2
let count = 0;
function combination(arr){
// for -> ๋ฝ๋ ๊ฐฏ์ ==> r ==> 2
for(let i = 0; i < arr.length; i++){
for(let j = i + 1; j<arr.length; j++){
count++;
console.log(arr[i],arr[j])
}
}
}
combination(input, 0, 2);
console.log(count)
--------------------------------------------------
OUTPUT
1 2
1 3
1 4
2 3
2 4
3 4
6
let input = [1,2,3,4]; // 4C2
let output = [];
let count = 0;
function combination(arr, data, s, idx, r){
if(s == r){
count++;
console.log(data)
return;
}
for(let i = idx; arr.length - i >= r - s ; i++){
data[s] = arr[i]
combination(arr, data, s + 1, i + 1, r)
}
}
combination(input, output, 0, 0, 2);
console.log(count)
--------------------------------------------------
OUTPUT
[ 1, 2 ]
[ 1, 3 ]
[ 1, 4 ]
[ 2, 3 ]
[ 2, 4 ]
[ 3, 4 ]
6
์ ํ์(์ฌ๊ท์)์ด๋ ์์ด์์ ์ด์ํ๋ ๋๊ฐ์ ํญ ์ฌ์ด์ ์ฑ๋ฆฝํ๋ ๊ด๊ณ๋ฅผ ๋ํ๋ธ ๊ด๊ณ์
//๋ฑ์ฐจ ์์ด - for ๋ฌธ
let result;
function forloop(s, t, number){
let acc = 0;
for(let i = 1; i <=number ; i++){
if( i == 1) {
acc += s;
} else{
acc += t;
}
console.log(i, acc)
}
return acc;
};
result = forloop(3, 2, 5)
console.log(result)
--------------------------------------------------
OUTPUT
1 3
2 5
3 7
4 9
5 11
11
--------------------------------------------------
--------------------------------------------------
//๋ฑ์ฐจ ์์ด - ์ฌ๊ท ํจ์
let result;
function recursive(s, t, number){
// ๋ฉ์ถ ์กฐ๊ฐ
if( number == 1){
return s;
}
// ๋ฐ๋ณตํ ์ฝ๋
return recursive(s, t, number-1) + t;
};
result = recursive(3, 2, 5)
console.log(result)
--------------------------------------------------
OUTPUT
11
number : 5 recursive(s, t, 4) + 2 => 9+2 => 11
number : 4 recursive(s, t, 3) + 2 => 7+2 => 9
number : 3 recursive(s, t, 2) + 2 => 5+2 => 7
number : 2 recursive(s, t, 1) + 2 => 3+2 => 5
number : 1 recursive(s, t, 1) + 2 => 3
๋ฑ๋น์์ด : F(n) = F(n-1)*a
โ ๋ฑ์ฐจ์์ด ๊ณต์์์ + โ *๋ก ๋ฐ๊พธ๋ฉด๋๋ค.
ํฉํ ๋ฆฌ์ผ : F(n) = F(n-1)*n
let reuslt;
function recursive(number){
if(number == 1){
return number;
}
return recursive(number-1)*number;
}
reuslt = recursive(5);
console.log(reuslt)
--------------------------------------------------
OUTPUT
120
5! = 5 X 4 X 3 X 2 X 1
--------------------------------------------------
--------------------------------------------------
let reuslt;
function recursive(number){
let hap = 1;
for( let i = 1 ; i <= number; i++){
hap *= i;
}
return hap;
}
reuslt = recursive(5);
console.log(reuslt)
--------------------------------------------------
OUTPUT
120
ํผ๋ณด๋์น ์์ด : F(n) = F(n-1)+F(n-2)
let reuslt;
function recursive(number){
if(number == 1|| number == 0){
return number;
}
return recursive(number - 1)+(number -2);
}
reuslt = recursive(5);
console.log(reuslt)
--------------------------------------------------
OUTPUT
5
f(5) = f(4) + f(3) => 2 + 3 = 5
f(4) = f(3) + f(2) => 1 + 2 = 3
f(3) = f(2) + f(1) => 1 + 1 = 2
f(2) = f(1) + f(0) => 1 + 0 = 1
f(1) = 1
f(0) = 0