자료구조

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

유일리 2022. 10. 18. 09:26
자료구조와 알고리즘이란?

 

프로그램은 자료구조+알고리즘 말한다.

 

자료구조는 컴퓨터 과학에서 효율적인 접근 및 수정을 가능케 하는 자료의 조직, 관리, 저장을 의미한다. 더 정확히 말해, 자료 구조는 데이터 값의 모임, 또 데이터 간의 관계, 그리고 데이터에 적용할 수 있는 함수나 명령을 의미한다.

 

알고리즘이란 컴퓨터로 문제를 풀기 위한 단계적인 절차이다.

알고리즘의 조건
  • 입력 : 0개 이상의 입력이 존재해야 한다.
  • 출력 : 1 이상의 출력이 존재해야 한다.
  • 명백성 : 각 명령어의 의미는 모호하지 않고 명확해야 한다.
  • 유한성 : 한정된 수의 단계 후에는 반드시 종료되어야 한다.
  • 유효성 : 각 명령어들은 실행 가능한 연산이어야 한다.
알고리즘의 기술 방법
  • 영어나 한국어와 같은 자연어
  • 흐름도 (flow chart)
  • 의사 코드 (pseudo-code)
  • c와 같은 프로그래밍 언어
알고리즘의 성능 분석
  • 수행 시간 측정
  • 두개의 알고리즘의 실제 수행 시간을 측정하는 것
  • 실제로 구현하는 것이 필요
  • 동일한 하드웨어를 사용하여야 함
  • 알고리즘의 복잡도 분석
  • 직접 구현하지 않고서도 수행 시간을 분석하는 것
  • 알고리즘이 수행하는 연산의 횟수를 측정하여 비교
  • 일반적으로 연산의 횟수는 n의 함수
  • 시간 복잡도 분석: 수행 시간 분석
  • 공간 복잡도 분석: 수행시 필요로 하는 메모리 공간 분석

수행 시간 측정

복잡도 분석

 

시간 복잡도는 알고리즘을 이루고 있는 연산들이 번이나 수행되는지를 숫자로 표시

빅오 표기법
  • 연산의 횟수를 대략적(점근적)으로 표기한 것으로, 빅오는 함수의 상한을 표시한다.
  • 자료의 개수가 많은 경우에는 차수가 가장 항이 가장 영향을 크게 미치고 다른 항들은 상대적으로 무시될 있다. 보통 시간복잡도 함수에서 가장 영향을 크게 미치는 항만을 고려하면 충분하다
  • 두개의 함수 f(n)g(n)이 주어졌을 때, 모든 n≥n0에 대하여 |f(n)| ≤ c|g(n)|을 만족하는 2개의 상수 cn0가 존재하면 f(n)=O(g(n))이다.

빅오 표기법의 예

빅오 표기법의 종류

  • O(1) : 상수형
  • O(logn) : 로그형
  • O(n) : 선형
  • O(nlogn) : 로그선형
  • O(n2 ) : 2차형
  • O(n3 ) : 3차형
  • O(n k ) : k차형
  • O(2 n ) : 지수형
  • O(n!) : 팩토리얼형

시간 복잡도 크기 O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(2^n) < O(n!)

최선, 평균, 최악의 경우

¨  알고리즘의 수행시간은 입력 자료 집합에 따라 다를 있다.

¨  최선의 경우(best case): 수행 시간이 가장 빠른 경우

¨  평균의 경우(average case): 수행시간이 평균적인 경우

¨  최악의 경우(worst case): 수행 시간이 가장 늦은 경우


자료형(data type)이란?

 

 

데이터의 집합과 연산의 집합이다.

추상 데이터 타입(ADT: Abstract Data Type) 데이터 타입을 추상적(수학적)으로 정의한 것으로, 데이터나 연산이 무엇(what)인가는 정의되지만 데이터나 연산을 어떻게(how) 컴퓨터 상에서 구현할 것인지는 정의되지 않는다.

  • 객체 : 추상 데이터 타입에 속하는 객체가 정의된다.
  • 연산 : 이들 객체들 사이의 연산이 정의된다. 이 연산은 추상 데이터 타입과 외부를 연결하는 인터페이스의 역할을 한다.

Ex) 추상 데이터 타입과 TV

 

TV의 인터페이스가 제공하는 특정한 작업만을 할 수 있다.

사용자는 TV의 내부를 볼 수 없다.

TV의 내부에서 무엇이 일어나고 있는지를 몰라도 이용할 수 있다.

사용자들은 ADT가 제공하는 연산만을 사용할 수 있다.

사용자들은 ADT 내부의 데이터를 접근할 수 없다.

 사용자들은 ADT가 어떻게 구현되는지 모르더라도 ADT를 사용할 수 있다.