const printNumberVersionOne = () => {
let number = 2;
while (number <= 100) {
if(number % 2 === 0) {
console.log(number);
}
number += 1;
}
}
const printNumberVersionTwo = () => {
let number = 2;
while (number <= 100) {
console.log(number);
number += 2;
}
}
printNumberVersionOne
은 루프를 100번 돌고 끝나지만 printNumberVersionTwo
는 50번만 돈다.
따라서 첫 번째 버전이 두 번째 버전보다 두 배 더 많은 단계를 거친다.
데이터: 일반적으로 모든 유형의 정보를 망라하는 용어. 가장 기초적인 수와 문자열로 이뤄진다.
자료 구조: 데이터를 조직하는 방법.
데이터 조직이 코드의 실행 속도에 미치는 영향이 크다.
const x = "Hello! ";
const y = "How are you ";
const z = "today?"
console.log(x + y + z);
const array = ["Hello! ", "How are you ", "today?"];
console.log(array[0] + array[1] + array[2]);
같은 데이터를 다양한 방식으로 조직할 수 있다.
배열: 컴퓨터 과학에서 기초적인 자료 구조 중 하나. 데이터 원소들의 리스트.
대부분의 자료 구조는 네 가지 연산이 있다.
연산이 얼마나 "빠른가" = 연산에 얼마나 "많은 계산 단계가 필요한가"
배열 내 특정 인덱스에 어떤 값이 들어 있는지 찾아보는 것.
배열에서의 읽기는 딱 한 단계.
인덱스 2를 찾는다면 인덱스 2로 바로 가서 값을 알려준다.
배열에 특정 값이 있는지 알아본 후, 있다면 어떤 인덱스에 있는지 찾는 것.
컴퓨터에 값을 제공하고 그 값이 들어 있는 인덱스를 반환하라고 요청하는 것.
컴퓨터는 모든 메모리 주소에 한 번에 접근하지만 각 메모리 주소에 어떤 값이 있는지 바로 알지 못한다.
N개의 셀로 이뤄진 배열은 선형 검색에 최대 N단계가 필요하다.
삽입 연산은 배열의 어디에 데이터를 삽입하는가에 따라 효율성이 다르다.
배열의 특정 인덱스의 값을 제거하는 과정
집합: 중복 값을 허용하지 않는 자료 구조. 중복 데이터가 없어야 할 때 유용하다.
중복 금지라는 제약으로 인해 집합 삽입의 효율성이 배열과 달라진다. 읽기, 검색, 삭제는 동일하다.
집합에서는 값을 삽입하기 전에 먼저 이 값이 집합에 들어 있는지 결정해야 한다.
즉, 삽입하려는 값이 집합에 이미 있는지부터 먼저 검색해야 한다. 집합에 삽입하려는 값이 없을 때에만 컴퓨터는 삽입을 허용한다.
따라서 모든 삽입에는 검색이 우선이다.
값을 집합의 맨 앞에 삽입하는 최악의 시나리오일 때, 총 2N+1단계가 필요하다.
집합의 삽입이 배열의 삽입보다 느리긴하지만, 중복 데이터가 없어야 할 때는 집합이 답이다.
애플리케이션의 요구사항을 먼저 분석한 후 어떤 자료 구조가 더 적합한지 결정해야 한다.
자료 구조의 성능 측정은 연산에 필요한 단계 수를 구하는 게 핵심이다.