[1.1] 자료구조와 알고리즘

자료구조

사람들이 사물을 정리하는 것과 마찬가지로 프로그램에서도 자료들을 정리하는 여러 가지 구조들이 있는데, 이를 자료 구조라 부른다.

물건을 쌓아 놓는 것 스택
영화관 매표소의 줄
할일 리스트  리스트
영어사전  사전, 탐색구조
지도  그래프
조직도  트리

 

알고리즘

컴퓨터 프로그램은 자료구조로 표현되고 저장되어있는 자료(data)와 주어진 문제를 처리하는 절차가 필요하다.

이러한 절차는 알고리즘이라고 불린다. 

예를 들어 트리의 어떤 노드를 탐색하는 문제가 있을 때, 트리는 자료구조이고, 이 트리 상에서 어떤 노드를 탐색하는 절차를 기술한 것이 알고리즘이다. 

알고리즘은 장치가 이해할 수 있는 언어로 기술된 명령어들의 집합으로,

알고리즘을 기술하는 데는 다음과 같은 방법이 있다.

  • 자연어
  • 흐름도(flowchart)
  • 유사 코드(pseudo-code)
  • 프로그래밍 언어

 

알고리즘이 되기 위한 조건은 다음과 같다.

  • 입력: 0개 이상의 입력이 존재해야 한다.
  • 출력: 1개 이상의 출력이 존재해야 한다.
  • 명백성: 각 명령어의 의미는 모호하지 않고 명확해야 한다.
  • 유한성: 한정된 수의 단계 후에는 반드시 종료되어야 한다.
  • 유효성: 각 명령어들은 실행 가능한 연산이어야 한다.

 

[1.2] 추상 데이터 타입

데이터: 처리의 대상이 되는 모든 것

데이터 타입: 데이터의 집합과 이러한 데이터에 적용할 수 있는 연산의 집합

추상 데이터 타입: 새로운 데이터 타입을 추상적으로 정의한 것

자료 구조: 추상 데이터 타입을 프로그래밍 언어로 구현한 것

 

추상 데이터 타입

데이터 타입의 정의가 그 데이터 타입의 구현으로부터 분리된 데이터 타입

즉 데이터 타입을 추상적으로 정의함을 의미

데이터나 연산이 무엇(what)인지는 정의되지만, 데이터나 연산을 어떻게(how) 컴퓨터 상에서 구현할 것인지는 정의되지 않는다.

프로그램에서 추상 데이터 타입이 구현될 때 구현 세부사항은 외부에 알리지 않고 외부와의 인터페이스만을 공개하게 된다. 즉 인터페이스만 정확하게 지켜진다면 추상 데이터 타입이 여러 가지 방법으로 구현될 수 있음을 뜻한다. 이를 통해 전체 프로그램을 변경 가능성이 있는 구현의 세부사항으로부터 보호하는 것이다.

 

[1.3] 알고리즘의 성능 분석

점점 더 처리해야 할 자료의 양이 많아지므로 효율성의 차이가 더 커지게 되고 사용자들은 빠른 프로그램을 선호하므로 경쟁력을 갖기 위해서는 최선의 효율성을 가져야 한다.

 

알고리즘의 복잡도 분석 방법

  • 공간 복잡도 : 알고리즘이 사용하는 기억 공간 분석
  • 시간 복잡도 : 알고리즘의 실행 시간 분석
    • 시간 복잡도 : 알고리즘의 절대적인 실행 시간을 나타내는 것이 아니라 알고리즘을 이루고 있는 연산들이 몇 번이나 실행되는 지를 숫자로 표시한다.
    • 시간 복잡도 함수: 입력 갯수 n에 따라 변하는 T(n)으로 표기

 

빅오 표기법

자료의 개수가 많은 경우 차수가 가장 큰 항이 가장 영향을 크게 미치고 다른 항들은 상대적으로 무시될 수 있다. 따라서 불필요한 정보를 제거해 알고리즘 분석을 쉽게 할 목적으로 시간 복잡도를 표시하는 방법을 빅오(big-oh notation) 표기법이라고 한다. 

 

[ 정의 ]

두개의 함수 f(n)과 g(n)이 주어졌을 때 모든  n>=n(0)에 대하여 |f(n)|<=c|g(n)|을 만족하는 2개의 상수 c와 n(0)가 존재하면 f(n)=O(g(n))이다.

 

많이 쓰이는 빅오 표기법 (실행 시간이 빠른 순)

  • O(1) : 상수형
  • O(log n) : 로그형
  • O(n) : 선형
  • O(n log n) : 선형 로그형
  • O(n^2) : 2 차형
  • O(n^3) : 3 차형
  • O(2^n) : 지수형
  • O(n!) : 팩토리얼형

'이론공부 > 자료구조' 카테고리의 다른 글

#2. 순환  (0) 2021.08.29

+ Recent posts