[Data Structure] 자료구조, Array

문성호·2020년 9월 3일

자료구조

  • 데이터를 편리하고 효율적으로 접근하고 조작하기 위한 방법.
  • 각각의 자료구조가 갖는 장점과 한계들이 있기 때문에, 본질과 컨셉을 잘 이해하고 상황에 따라 올바르게 선택하고 사용해야 함.
  • 데이터와 시스템의 상황에 맞는 적절한 자료구조를 사용하는 것이 시스템의 성능 등에 매우 큰 영향을 미침.

자료구조의 분류

  • Primitive Data Structure(단순 구조)
    : 프로그래밍에서 사용되는 기본 데이터 타입
  • None-Primitive Data Structure(비단순 구조)
    : 단순한 데이터를 저장하는 구조가 아니라 여러 데이터를 목적에 맞게 효과적으로 저장하는 자료 구조
    - Linear Data Structure(선형 구조)
    : 저장되는 자료의 전후 관계가 1:1 (ex. List, Stacks, Queues)
    - Non-Linear Data Structure(비선형 구조)
    : 데이터 항목 사이의 관계가 1:n 또는 n:m (ex. Graphs, Trees )

일반적으로 자주 사용되는 자료구조

  • Array(Python에서는 List)
  • Tuple
  • Set
  • Dictionary
  • Stack & Queue
  • Tree

Array(List)

  • 대표적으로 배열(Array) 또는 파이썬은 List.

주요 특징

1) 장점

  • 순차적으로 데이터를 삽입 및 저장. (실제 물리적으로 데이터가 저장됨)
  • 그래서 구현과 접근이 쉽다.

2) 단점

  • 중간요소를 추가, 삭제하고 나면 삭제된 요소로부터 뒤에 있는 모든 요소들을 앞으로 한 칸씩 이동시켜야 함. 실제 메모리 상에 하는 작업이 많기 때문에 Expensive한 Operation이 된다.
  • 그래서 정보가 자주 삭제되거나 추가되는 데이터를 담기에 적절치 않음.
  • Resizing
    • 배열은 메모리에 순차적으로 채워지기 때문에, Size를 Pre-allocation 해두는데,
      더 필요한 경우 추가 할당하기 위해 Resizing해야 됨.
    • 추가 메모리 할당을 위해서 resizing하는 operation은 매우 Heavy함.
    • 사이즈 예측이 잘 안 되는 데이터를 다루기에는 적절치 않음.

3) 언제 사용해야 할까?

  • 순차열적 데이터를 저장할 때 (값보다는 순서가 중요한 데이터, 주식가격)
  • 다차원 데이터를 다룰 때
  • 어떤 특정요소에 빠르게 접근하는 게 좋을 때.
  • 데이터의 사이즈 변나 요소의 이동이 급격하지 않을 때
profile
오늘을 모아 내일을

0개의 댓글