CS/자료구조

자료구조 - 빅오표기법, 선형 자료구조

개발 일기92 2024. 6. 21. 16:07

최악 : 빅오 표기법

평균 : 빅세타 표기법

최선 : 빅오메가 표기법

 

빅오 표기법?

입력 값(n)에 대한 수식에서 최고차항을 기준으로 알고리즘이 수행되는 최악의 시간 복잡도.

출처 : https://velog.io/@nana-moon/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B9%85%EC%98%A4-%ED%91%9C%EA%B8%B0%EB%B2%95big-O-notation%EC%9D%B4%EB%9E%80

 

  • O(1) : ex)  stack의 push, pop
  • O(log N) : ex) binary search 알고리즘, tree 형태 자료구조 탐색. 연산이 한 번 실행될 때 마다 데이터의 크기가 절반 감소하는 알고리즘 (log의 지수는 항상 2)
  • O(N) : ex) 1중 for문 입력값(N)이 증가함에 따라 실행시간도 선형적으로 증가하는 알고리즘
  • O(N log N) : ex) 퀵 / 병합 / 힙 정렬. O(N)의 알고리즘과 O(log N)의 알고리즘이 중첩된 형태
  • O(N^2) : ex) 2중 For 문, 삽입/거품/선택 정렬. O(N)의 알고리즘과 O(log N)의 알고리즘이 중첩된 형태
  • O(2^N) : ex) fibonacci 수열. 빅오 표기법 중 가장 느린 시간 복잡도로 주로 재귀적으로 수행하는 알고리즘

선형 자료구조?

연속적으로 데이터가 나열되는 자료구조.

ex) 배열, 리스트, 스택, 큐 등

 

배열?

  • 정해진 크기만큼 데이터가 일렬로 저장되는 정적 자료구조.
  • 각 데이터를 요소, 가르키는 번호를 인덱스라 한다.
  • 인덱스는 0 ~ n-1
  • 특정 인덱스의 데이터에 접근하는 시간 O(1)
  • 검색 시간 O(n) - 데이터 검색 시 0 ~ n까지 탐색
  • 삽입 시간 O(n) - 원하는 인덱스에 데이터 있을경우 뒷index데이터들을 한칸씩 미룬다

연결 리스트?

  • 크기가 정해지지 않은 동적 자료구조.
  • 여러 개의 노드가 다음 노드의 주소 값을 가지고 있다.
  • 헤드 포인터와 테일 포인터로 시작과 끝을 알 수 있다.
  • 인덱스가 없어서 특정 위치 데이터에 접근하는 데 배열보다 오래걸림.
  • 검색 시간 O(n)
  • 추가 시간 O(1) - 이전 노드가 가리키는 노드의 주소 값을 변경 하는 작업. but! 데이터를 추가하려는 위치로 이동하기까지 O(n)이 소요된다.
  • 삭제 시간 O(n)

이중 연결 리스트? 

  • 앞 노드의 주소 값과 다음 노드의 주소 값을 모두 저장.
  • 양방향 탐색이 가능하다.
  • but 한 노드당 주소 값 2개를 저장해야 해서 메모리를 많이 차지한다.
  • 연결 순서와 무관하게 노드 연속 탐색이 가능해 시간적으로 효율적이다.
  • 구현이 기존 연결 리스트보다 어렵다.

원형 연결 리스트?

  • 마지막 노드가 NULL값이 아니라 첫 번째 노드의 주소값을 가리키는 구조다.
  • 삽입과 삭제 연산에 효율적이다.

스택?

  • 데이터를 쌓는 형태, 마지막에 들어온 데이터가 먼저 나간다. LIFO
  • 데이터 삽입 push, 데이터 삭제 pop - O(1)
  • top - 마지막으로 저장한 인덱스 
  • 어떤 작업의 실행 취소 시 자주 자용됨. ex) 웹 뒤로가기
명령어 설명 복잡도
push 삽입 O(1)
pop 삭제 O(1)
peek 가장 위에 있는 데이터 확인 O(1)
isEmpty 비어있는지 확인 O(1)
isFull 가득 찼는지 확인 O(1)

큐? 

  • 데이터가 순차적으로 들어오는 형태. FIFO
  • 맨 앞을 front, 맨 뒤를 rear
  • 데이터 추가 시 맨 뒤에 추가됨 - 인큐.Enqueue
  • 데이터 삭제 시 맨 앞에서 삭제 - 디큐.Dequeue
  • ex) 작업 요청이 들어오는 순서대로 처리하는 프로세스가 CPU 할당 받기전 대기하는 준비queue
명령어 설명 복잡도
enqueue rear에 삽입 O(1)
dequeue front에 삭제 O(1)
peek front 데이터 확인 O(1)
isEmpty 비어있는지 확인 O(1)
isFull 가득 찼는지 확인 O(1)

 

덱? deque

양쪽 끝에서 데이터의 삽입, 삭제가 모두 가능한 자료구조.

스택+큐 형태이다.

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

자료구조 - 비선형  (1) 2024.06.21