Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- UXUI기초정복
- 국비지원교육
- 백준
- Spring
- 백엔드 부트캠프
- UXUI챌린지
- 백엔드개발자
- OPENPATH
- 내일배움카드
- 오픈패스
- 환급챌린지
- mysql
- Java
- 백엔드
- 국비지원취업
- 패스트캠퍼스
- 국비지원
- 오픈챌린지
- 오블완
- Be
- KDT
- 티스토리챌린지
- 부트캠프
- 디자인강의
- baekjoon
- 디자인교육
- UXUIPrimary
- 디자인챌린지
- 객체지향
- 내일배움캠프
Archives
- Today
- Total
군만두의 IT 공부 일지
[스터디3] 자료구조 - 07. 복잡도 및 선형 자료 구조 본문
목차
5.2 섹션인 선형 자료 구조 위주로 정리하려고 합니다. 자료 구조를 정확히 이해하면 좋다는 것을 알지만, 자주 헷갈리는 것 같습니다.
5장 자료 구조
5.1 복잡도
5.1.1 시간 복잡도
- 시간 복잡도: 입력 크기에 대해 어떠한 알고리즘이 실행되는 데 걸리는 시간
- 빅오 표기법: 입력 범위 n을 기준으로 해서 로직이 몇 번이나 반복되는지 나타내는 것
- 시간 복잡도는 효율적인 코드로 개선하는 데 쓰이는 척도가 됨.
5.1.2 공간 복잡도
- 공간 복잡도: 프로그램을 실행시켰을 때 필요로 하는 자원 공간의 양
- 정적 변수로 선언된 것 외 동적으로 재귀적인 함수로 공간을 계속 필요로 하는 경우도 포함됨.
5.1.3 자료 구조에서의 시간 복잡도
- 시간 복잡도를 생각할 때 평균, 최악의 시간 복잡도를 고려해야 함.
자료 구조 | 접근 | 탐색 | 삽입 | 삭제 |
배열(array) | O(1) | O(n) | O(n) | O(n) |
스택(stack) | O(n) | O(n) | O(1) | O(1) |
큐(queue) | O(n) | O(n) | O(1) | O(1) |
이중 연결 리스트(doubly linked list) | O(n) | O(n) | O(1) | O(1) |
해시 테이블(hash table) | O(1) | O(1) | O(1) | O(1) |
이진 탐색 트리(BST) | O(log n) | O(log n) | O(log n) | O(log n) |
AVL 트리 | O(log n) | O(log n) | O(log n) | O(log n) |
레드 블랙 트리 | O(log n) | O(log n) | O(log n) | O(log n) |
▲ 자료 구조의 평균 시간 복잡도
자료 구조 | 접근 | 탐색 | 삽입 | 삭제 |
배열(array) | O(1) | O(n) | O(n) | O(n) |
스택(stack) | O(n) | O(n) | O(1) | O(1) |
큐(queue) | O(n) | O(n) | O(1) | O(1) |
이중 연결 리스트(doubly linked list) | O(n) | O(n) | O(1) | O(1) |
해시 테이블(hash table) | O(1) | O(n) | O(n) | O(n) |
이진 탐색 트리(BST) | O(n) | O(n) | O(n) | O(n) |
AVL 트리 | O(log n) | O(log n) | O(log n) | O(log n) |
레드 블랙 트리 | O(log n) | O(log n) | O(log n) | O(log n) |
▲ 자료 구조의 최악의 시간 복잡도
5.2 선형 자료 구조
- 선형 자료 구조: 요소가 일렬로 나열되어 있는 자료 구조
5.2.1 연결 리스트
- 연결 리스트: 데이터를 감싼 노드를 포인터로 연결해서 공간적인 효율성을 극대화시킨 자료 구조
- prev 포인터와 next 포인터로 앞뒤 노드를 연결시킨 것
- 시간 복잡도 - 삽입, 삭제: O(1) / 탐색: O(n)
- 싱글 연결 리스트: next 포인터만 가짐.
- 이중 연결 리스트: next 포인터와 prev 포인터 가짐.
- push_front(): 앞에서부터 요소 넣음.
- push_back(): 뒤에서부터 요소 넣음.
- insert(): 중간에 요소 넣음.
- 원형 이중 연결 리스트: 이중 연결 리스트와 같지만, 마지막 노드의 next 포인터가 헤드 노드를 가리킴.
5.2.2 배열
- 배열(array): 같은 타입의 변수들로 이루어져 있고, 크기가 정해져 있으며, 인접한 메모리 위치에 있는 데이터를 모아놓은 집합
- 중복, 순서가 있음. 랜덤 접근이 가능함.
- 시간 복잡도 - 접근(참조): O(1) / 삽입 삭제: O(n)
- 배열과 연결 리스트 비교
- 배열은 순서대로 나열한 데이터 구조로, 인덱스를 알고 있다면 해당 요소를 즉시 가져올 수 있음.
- 연결 리스트는 선(포인터)를 사용하여 다음 요소와 연결된 형태의 데이터 구조로, 요소를 찾기 위해서 순차적으로 탐색해야 함.
- 이러한 이유로 n번째 요소의 접근(참조)는 배열이 연결 리스트 보다 빠름. 데이터 추가 및 삭제는 연결 리스트가 배열 보다 빠름.
5.2.3 벡터
- 벡터(vector): 동적으로 요소를 할당할 수 있는 동적 배열
- 컴파일 시점에 개수를 모른다면 벡터를 사용해야 함.
- 중복, 순서가 있음. 랜덤 접근이 가능함.
- 시간 복잡도 - 탐색과 맨 뒤 삭제 후 삽입: O(1) / 맨 뒤나 맨 앞이 아닌 요소 삭제 후 삽입: O(n)
- 벡터 함수
- push_back(): 뒤에서부터 요소를 더함.
- pop_back(): 맨 뒤부터 지움.
- erase(): 지움.
- clear(): 배열을 초기화함.
5.2.4 스택
- 스택(stack): 가장 마지막으로 들어간 데이터가 가장 첫 번째로 나오는 성질(LIFO: Last In First Out)을 가진 자료 구조
- 재귀 함수, 알고리즘, 웹 브라우저 방문 기록 등에 사용됨.
- 시간 복잡도 - 삽입 삭제: O(1) / 탐색: O(n)
5.2.5 큐
- 큐(queue): 먼저 집어넣은 데이터가 먼저 나오는 성질(FIFO: First In First Out)을 가진 자료 구조
- CPU 작업을 기다리는 프로세스, 스레드 행렬 또는 네트워크 접속을 기다리는 행렬, 너비 우선 탐색, 캐시 등에 사용됨.
- 시간 복잡도 - 삽입 삭제: O(1) / 탐색: O(n)
이 글은 『 면접을 위한 CS 전공지식 노트 』 책을 학습한 내용을 정리한 것입니다.
'학습일지 > CS 지식' 카테고리의 다른 글
[스터디3] 디자인 패턴 - 09. 디자인 패턴과 프로그래밍 패러다임 (0) | 2025.01.18 |
---|---|
[스터디3] 자료구조 - 08. 비선형 자료 구조 (0) | 2025.01.12 |
[스터디3] 데이터베이스 - 06. 트랜잭션과 무결성 (1) | 2025.01.03 |
[스터디3] 데이터베이스 - 05. ERD와 정규화 과정 (0) | 2025.01.03 |
[스터디3] 운영체제 - 04. CPU 스케줄링 알고리즘 (1) | 2025.01.01 |
Comments