Post

자료구조

자료구조 정의, 성능

정의

데이터 (Data)

  • 모든 유형의 정보를 망라하는 용어
  • 일반적으로 수와 문자열의 조합으로 이루어짐
1
2
3
4
x = "Hello "
y = "world"
z = "!"
print(x+y+z)

자료구조 (Data structure)

  • 데이터를 구조화하여 조작하는 방법
  • 구조에 따라 코드의 실행속도에 미치는 영향이 큼
1
2
3
array = ["Hello ", "world", "!"]
for a in array:  
  print(a, end="") # 개행없이 print

연산

자료구조의 성능을 확인하기 위해서는 코드와 자료구조가 어떻게 상호작용하는지 분석이 필요하다.

대부분의 자료구조는 아래에 기술한 네 가지 기본방법을 주로 사용한다.

읽기

  • 자료구조의 특정 위치(index)를 찾아보는 것
  • index 제공한 다음 값을 반환받는 구조
  • 일반적으로 index는 컴퓨터의 메모리 주소와 mapping 되어있다고 볼 수 있음

검색

  • 자료구조에서 특정 값이 있는지 알아본 후, 어떤 위치(index)에 있는지 찾기
  • 값을 제공한 다음 index를 반환받은 구조
  • 컴퓨터는 각 메모리 주소에 할당된 값을 바로 알지 못하기에 각 셀을 하나씩 조사하는 방법밖에 없음

삽입

  • 자료구조에 새로운 값을 추가하는 것
  • 삽입되는 위치에 따라 성능이 달라짐

삭제

  • 자료구조에서 값을 제거하는 것
  • 삭제되는 위치에 따라 성능이 달라짐

성능

시간은 연산을 담당하는 하드웨어 성능에 따라 다르기에 절대적인 수치가 될 수 없다.

성능을 측정할 때는 순수하게 시간 관점에서 연산이 얼마나 빠른가가 아니라 얼마나 많은 단계가 필요한 지를 검토해야한다.

100 이하의 짝수를 출력하는 함수 2개를 예시로 들어본다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 100 단계 진행
def print_even_v1:
    n = 1
    while n <= 100:
        if n % 2 == 0:
          print(n)
        n += 1
        
# 50 단계 진행
def print_even_v2:
    n = 2
    while n <= 100:
      print(n)
      n += 2

print_even_v1, print_even_v2 모두 같은 결과를 출력한다.

하지만, 루프를 보면 print_even_v1print_even_v2 보다 2배의 단계가 필요하다.

그렇기에 print_even_v2가더 성능이 좋은 것으로 볼 수 있다.

This post is licensed under CC BY 4.0 by the author.