알고리즘 성능 평가 지표
시간 복잡도
빅오 표기법의 경우 for문 하나의 경우 n회로 따지고 수행 하나는 1회로 침
이 때 1+1+1 = 3이어도 O(1)임 n이 있다면 1+n+1 = n+2인데 O(n)임
// 순열 예제
let input = ["a", "b", "c"];
let count = 0;
function permutation(arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length; j++) {
if (i == j) continue;
for (let k = 0; k < arr.length; k++) {
if (i == k) continue;
if (j == k) continue;
console.log(arr[i], arr[j], arr[k]);
count++;
}
}
}
}
permutation(input);
// 순열 예제(재귀 활용)
let input = ["a", "b", "c"];
let count = 0;
function permutation(arr, s, r) {
if (s == r) {
count++;
console.log(arr.join(" "));
return;
}
for (let i = s; i < arr.length; i++) {
[arr[s], arr[i]] = [arr[i], arr[s]];
permutation(arr, s + 1, r);
[arr[s], arr[i]] = [arr[i], arr[s]];
}
}
permutation(input, 0, 2);
// 조합 예제
let input = [1, 2, 3, 4];
let count = 0;
function combination(arr) {
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);
// 조합 예제(재귀 활용)
let input = [1, 2, 3, 4];
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);
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);
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);
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);
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);
let result;
function recursive(number) {
if (number == 1) {
return number;
}
return recursive(number - 1) * number;
}
result = recursive(5);
console.log(result);
let result;
function recursive(number) {
if (number == 1 || number == 0) {
return number;
}
return recursive(number - 1) + recursive(number - 2);
}
result = recursive(5);
console.log(result);