데이터를 조직하는 방법
연산이 얼마나 빠른가? (x)
→ 얼마나 많은 단계가 필요한지
(ex. 인덱스 3에 있는 값을 찾으라고 요청하면 컴퓨터는 인덱스 0의 메모리 주소를 가져와 3을 더한다.)
한단계로 끝나는 연산은 당연히 가장 빠른 연산 유형 중 하나이다
배열에 새 데이터를 삽입하는 연산은 배열의 어디에 데이터를 삽입하는가에 따라 효율성이 다르다.
컴퓨터의 또 다른 특징 ) 배열을 할당할 때, 항상 배열의 크기를 기록한다!
배열의 맨 뒤에 데이터를 삽입할 때는 1단계면 된다.
하지만, 배열의 맨 처음이나 중간에 데이터를 삽입하면 문제가 달라진다.(삽입할 공간을 만들기 위해 많은 데이터 조각을 이동시켜야 하므로 단계가 늘어난다)
ex) 위 배열에서 2번째 index 자리에 새 셀을 넣는다고하면 4를 한칸, 3을 한칸, 2를 한칸 총 3번의 이동이 일어나고, 새로운 셀을 넣는 1번의 연산이 일어나 총 4단계가 일어난다.
배열 삽입에서 최악의 시나리오, 즉 삽입에 가장 많은 단계가 걸리는 시나리오는 데이터를 배열의 맨 앞에 삽입할 때이다!
→ 배열 앞에 삽입하면 배열 . 내모든 값을 한 셀씩 오른쪽으로 옮겨야 하기 때문이다.
원소 N개를 포함하는 배열에서 최악의 시나리오일 때 삽입에는 N+1단계가 걸린다. (N번 이동 후, 1삽입)
배열의 삭제는 특정 인덱스의 값을 제거하는 과정
해당 배열에서 셀을 삭제하는 것은 기술적으로 한 단계만 걸린다. (문제는 비어있는 셀을 매꾸는 작업 즉 왼쪽으로 옮기는 작업이 필요하다.)
삽입과 비슷하게 원소 삭제에서 최악의 시나리오는 배열의 첫 번째 원소를 삭제하는 것이다. 이렇게 되면 인덱스 0이 비게 되고, 남아있는 모든 원소를 왼쪽으로 이동시켜 빈공간을 채워야한다.
원소 N개를 포함하는 배열에서 삭제에 필요한 최대 단계 수는 N단계라고 할 수 있다.
배열 기반 집합 ( 단순 리스트로 배열과 거의 비슷 )(중복값 허용 x)
‘중복금지’라는 제약이 하나 추가된 것만으로, 집합의 효율성이 크게 달라진다.
집합 ( 읽기, 검색, 삭제는 일반 배열과 시간복잡도가 동일)
but, 삽입은 다르다.
집합에서 삽입을 할 때는, 먼저 이 값이 이미 집합에 들어 있는지 결정해야한다. (중복데이터 막기)
집합에 새 값이 없을 때에만 컴퓨터는 삽입을 허용
모든 삽입에는 검색이 우선
집합의 끝에 삽입하려면 원소 N개에 대해 최대 N+1 단계가 필요하다. (N = 검색, 1= 삽입)
but, 최악의 시나리오
집합의 맨 앞에 삽입하는 경우
→ 컴퓨터는 N개를 검색해서 집합이 그 값을 포함하지 않음을 확인한 후, 또 다른 N단계로 모든 데이터를 오른쪽으로 옮겨야하며, 마지막 단계에서 새 값을 삽입해야한다. 총 2N+1(N(검색)+N(이동)+1(삽입))이다. (일반 배열은 N+1 ⇒ n개 이동 후, 첫번째 셀에 삽입)
자료구조의 성능 측정은 연산에 필요한 단계 수를 구하는 게 핵심이다.