무냐의 개발일지
[자료구조] 배열, 연결리스트 시간복잡도 비교 본문
* 시간복잡도 비교 (worst case)
배열 | 한방향 연결리스트 | 양방향 연결리스트 | |
읽기/쓰기 | O(1) | ||
moveAfter/ Before |
O(n) | O(1) | |
pushFront | (insert 라고 보면 될듯) O(n) | O(1) | O(1) |
pushBack | (append) O(1) | O(n) | O(1) |
popFront | (pop(0)) O(n) | O(1) | O(1) |
popBack | (pop) O(1) | O(n) | O(1) |
Insert | (insert(3)) O(n) | O(n) | O(1) |
Remove | (remove) O(n) | O(n) | O(1) |
Search | O(n) | O(n) | O(n) |
Index/ Count | O(n) | ||
append, pop 연산이 평균 O(1)시간이다. resize가 일어나지 않는 한 O(1) 걸리고, append할 때마다 resize가 발생하지 않고, 가끔 발생하므로 그냥 O(1)이라고 생각한다 | 한방향에서는 next=None인 애가 tail이다. | search만 O(n) 걸리고, 나머지는 다 O(1) 걸린다. 링크가 다 연결되어 있으므로 각자의 링크만 변경시켜주면 되니까. search만 head에부터 시작해서 찾아야되니까 오래 걸린다. |
배열은 읽기, 쓰기 할 때 값이 저장된 곳의 주소를 아니까, O(1)시간만 걸려 매우 빠르게 계산할 수 있다
연결리스트는 head, tail이 있다.
한방향은 기본적으로 항상 head에서부터 시작해서, 쭉 next를 따라가면서 찾아야하므로, head의 위치를 아는 front연산 제외하고는 다 O(n) 시간 걸린다
반면, 양방향 연결리스트는 head, tail과 앞뒤 링크가 모두 있으므로
'데싸 추가 독학' 카테고리의 다른 글
[자료구조] 파이썬으로 계산기 만들기 (Stack) (0) | 2024.04.09 |
---|---|
파이썬 클래스, 객체, 계좌만들기 실습 (0) | 2024.04.08 |
ARIMA 모델에서 가장 중요한 정상성 확인 | ADFuller test에 대하여 (0) | 2024.02.29 |
[머신러닝] 머신러닝에 사용되는 라이브러리 순서!! (0) | 2024.02.19 |
[데이터 과학을 위한 통계]#1 EDA 탐색적 데이터분석 (0) | 2024.02.18 |