본문 바로가기

컴퓨터기초/자료구조

빅오표기법 및 Linked list(링크드리스트)의 시간복잡도에 대하여....

시간복잡도를 설명하기전에....

모든 개발자는 자신만의 시간 관념이 있습니다. 개발자들은 대부분의 시간을 사용자들에게 쏟아붓기 때문에, 최대한 시간을 효율적으로 사용하고 싶어하죠. 시간복잡도 를 최소화 함으로써 이게 실현가능해집니다

 

.프로그래밍에서 시간복잡도를 이해하기 전에, 먼저 이 시간복잡도가 알고리즘에서 흔하게 활용된다는 사실을 기억해야합니다

알고리즘이란??....

알고리즘은 어떤 목적을 달성하거나 결과물을 만들어내기 위해 거쳐야 하는 일련의 과정들을 의미합니다.

하나의 예시를 들면?..

밥짓는것을 예로 들어봅시다.

1. 쌀통에 쌀을 담는다.

2. 쌀을 물로 씻는다.

3. 적당량의 물을 담는다.

4. 밥솥에 넣고 취사버튼을 누른다.

5. 완료!!.

밥도 물을 어떻게 넣는냐에 따라 다르고..고산시대에서 밥을 짓거나.. 냄비로 지을떄도 다르겠죠.

이런 상황말고도 어떤 변수와 상황에 따라 어떻게 될지 모릅니다.

결국 시간복잡도를 분석 하는 것은 input n 에 대하여 알고리즘이 문제를 해결하는 데에 얼마나 오랜 시간이 걸리는 지를 분석하는 것 과 같습니다.

그리고 이를 Big-O 표기 를 이용하여 정의할 수 있습니다.

일단 대표적인 시간복잡도를 설명해보도록 하겠습니다.

  1. O(1) – 상수 시간 : 입력값 n 이 주어졌을 때, 알고리즘이 문제를 해결하는데 오직 한 단계만 거칩니다. 1~999999일정한 상수...
  2. O(log n) – 로그 시간 : 입력값 n 이 주어졌을 때, 문제를 해결하는데 필요한 단계들이 연산마다 특정 요인에 의해 줄어듭니다.  
  3. O(n) – 직선적 시간 : 문제를 해결하기 위한 단계의 수와 입력값 n이 1:1 관계를 가집니다.  2n -> n 으로표시
  4. O(n^2) – 2차 시간 : 문제를 해결하기 위한 단계의 수는 입력값 n의 제곱입니다.
  5. O(C^n) – 지수 시간 : 문제를 해결하기 위한 단계의 수는 주어진 상수값 C 의 n 제곱입니다.

그리고 하나의 생각을 더 붙이자면 시간 복잡도는 문제해결을 위한 알고리즘을 구현할떄의 경우의 수를 의미한다고 생각하면 쉽다.

 

그럼 예시를 들어  자료구조별 시간복잡도를 정리해보겠습니다.

 

1. Linked list

하나의 예시를 들어보자. 

5개의 노드가 연결된 링크드리스트가 있다.

(1). 검색

  검색을 할 경우에 시간 복잡도는 어떻게 될까?....

 

링크드인의 검색 진행과정을 그림으로 표현해 보았다..

처음노드에서 다음 노드로 계속 넘어가면서 값을 찾기 떄문에 가장 좋을떈 O(1)이지만 최악의 경우는 O(N)이 되어버린다.

그러므로 시간 복잡도는  O(n)이 된다.

2. 삽입

1. vtx를 생성.. (노드 생성)

2. vtx의 자식을 head 에 연결하고...

3. 기존의 헤드값을 vtx를 부모로하는 head 값으로 재변경..

그러므로 빅오표시면을 표시하면 O(3)가 된다. 상수값이므로 O(1)이 됩니다.

하지만 만약에 검색을 해서 찾아서 해야된다면 O(n) 이되겠죠?

 

3. 삭제

1. 버릴값을 기존 head로 저장하고

2. 앞으로 쓸 head 값을 기존 head의 자식값으로 ..

O(2)이므로 O(1)이다.

결국 수정과 삭제는 중간에 있던지 어디에 있던지 노드로 연결되어있기떄문에 검색없이 이미 위치를 안다면.. 삭제나 그 삽입할 위치에 연결을 시키거나 그것만 삭제시키고 연결하면 되는 부분이다.

 

링크드인 구조 설명이 필요하다면 아래 사이트로 이동..

https://dreammarker.tistory.com/98

'컴퓨터기초 > 자료구조' 카테고리의 다른 글

Hash Table에 대해서..  (0) 2019.12.30
Tree에 대해서  (0) 2019.12.30
Graph에 대해서...  (0) 2019.12.30
Linked List 에 대해서  (0) 2019.12.30