본문 바로가기
CS/자료구조

[자료구조] 배열(Array)

by 개발도사(진) 2023. 7. 26.

*** 개인이 공부한 내용들을 간략하게 정리하고 참고하기 위한 포스팅입니다. 설명에 실수가 있을 수 있습니다. 지적해 주시면 정말 감사하겠습니다. ***

 

정의 : 연속된 정수로 인덱싱된 같은 type의 원소들의 집합. 

 

1. Add 

1-1) sorted array : 순서를 유지하기 위해 shifting을 통해 공간을 만들어야 하므로, time complexity는 O(n)이다.

1-2) unsorted array: array의 끝에 원소를 더하면 되므로 time Complexity는 O(1)이다.

 

2. Remove

1-1) sorted array: shifting을 통해 삭제된 공간을 메워 줘야 하므로, time Complexity는 O(n)이다.

1-2) (삭제할 index가 주어졌다는 가정 하에) 삭제할 index의 원소와 마지막 원소를 바꾸고 마지막 원소만 지우면 되므로, time Complexity는 O(1)이다. 

 

3. Find(Search)

3-1) linear search: iteration을 통해 찾고자 하는 원소를 찾는 방식. time Complexity는 O(n)이다.

3-2) binary search: sorted array에서만 사용 가능하며, time complexity는 O(logn). 자세한 내용은 후술한다.

 

Binary Search

binary search(이분 탐색)이란, sorted array를 반으로 나누고, 그 중 찾고자 하는 값을 포함하는 범위를 다시 반으로 나누는 것을 답을 찾을 때까지 반복하는 것이다. 개인 공부용 블로그 포스팅이기에 할 수 있는 표현이지만 그냥 술자리에서 하는 업&다운 게임이다.

 

Pseudo-Code는 아래와 같다.

left = 0
right = n-1
while(left<right):
	mid = (left+right)/2
    if(array[mid]<x):
    	left = mid+1
    else:
    	right = mid
if(left==right) and (array[left] ==x):
	found = True
    foundIdx = left
else:
	found=False

input 크기가 N일 때, 한 번 탐색을 수행할 때마다 N이 (1/2)N으로 줄어드므로, 최악의 상황에서는 (1/2)^k*N = 1이 된다. 따라서

(1/2)^k*N = 1

=> N = 2^k

=> log_2(N) = k

 

k는 탐색 횟수고 그것이 input에 log2를 취한 것에 비례하므로, Binary Search의 time complexity는 O(log_2(N)) = O(logN)이다. 

 

 

 

'CS > 자료구조' 카테고리의 다른 글

[자료구조] Stack  (0) 2023.09.11
[자료구조] Circularly Linked List  (0) 2023.09.05
[자료구조] Doubly Linked List  (0) 2023.09.04
[자료구조] Singly Linked List  (0) 2023.07.29
[자료구조] Map  (0) 2022.11.11