본문 바로가기

Learn/자료구조와 알고리즘

자료구조와 알고리즘 학습 #4 추상 자료와 알고리즘

반응형

2020/09/08 - [Learn/자료구조와 알고리즘] - 자료구조와 알고리즘 학습 #3 소프트웨어 생명주기

 

자료구조와 알고리즘 학습 #3 소프트웨어 생명주기

2020/08/29 - [Learn/자료구조와 알고리즘] - 자료구조와 알고리즘 학습 #2 자료 표현 자료구조와 알고리즘 학습 #2 자료 표현 2020/08/29 - [Learn/자료구조와 알고리즘] - 자료구조와 알고리즘 학습 #1 자료�

javart.tistory.com


자료구조

추상 자료형

1) 뇌의 추상화 기능 : 기억할 대상의 구별되는 특징만을 단순화하여 기억하는 기능

출처) C로 배우는 쉬운 자료구조, 한빛아카데미

2) 컴퓨터를 이용한 문제 해결에서의 추상화

 가) 자료 추상화(Data Abstarction)

 - 크고 복잡한 문제를 단순화시켜 쉽게 해결하기 위한 방법

 - 처리할 자료, 연산, 자료형에 대한 추상화 표현

 

 나) 자료(Data)

 - 프로그램의 처리 대상이 되는 모든 것을 의미

 

 다) 연산(Operation)

 - 어떤 일을 처리하는 과정으로 연산자에 의해 수행

 

 라) 자료형(Data Type)

 - 처리할 자료의 집합과 자료에 대해 수행할 연산자의 집합

 

3) 추상 자료형(ADT, Abstact Data Type)

 - 자료형의 종류

   = 시스템의 정의 자료형

   = 사용자 정의 자료형 : 사용자가 필요에 따라 시스템 정의 자료형이나 기존에 정의해 놓은 다른 사용자 정의 자료형을 이용하여 정의

 

 - 추상화

 -> 자료형을 정의하기 위해서는 구체적인 구현에 앞서 자료형에 대한 자료와 연산자의 특성과 연산자는 무엇을 수행해야하는지를 정의 해야한다.

 

 - 추상화의 장점

 -> 구체적인 구현을 포함하지 않기에 알고리즘을 개발하기가 단순해지며, 실제 프로그래밍 언어를 사용하여 프로그램으로 구체화하기 쉬움

 

-추상화와 구체화

 = 추상화 : '무엇인가?"를 논리적으로 정의

 = 구체화 : '어떻게 할 것인가'를 실제적으로 표현

출처) C로 배우는 쉬운 자료구조, 한빛아카데미
자료 연산에 있어서의 추상화와 구체화의 관계

 

알고리즘

정의

주어진 문제를 해결하기 위한 방법을 추상화하여 단계적 절차를 논리적으로 기술해놓은 명세서

 

조건

 1. 입력(Input) : 알고리즘 수행에 필요한 자료가 외부에서 입력으로 제공될 수 있어야 한다.

 2. 출력(Output) : 알고리즘 수행 후 하나 이상의 결과를 출력해야 한다.

 3. 명확성(Definiteness) : 수행할 작업의 내용과 순서를 나타내는 알고리즘의 명령어들은 명확하게 명세 되어야 한다.

 4. 유한성(Finiteness) : 알고리즘은 수행 뒤에 반드시 종료되어야 한다.

 5. 효과성(Effectiveness) : 알고리즘의 모든 명령어들은 기본적이며 실행이 가능해야 한다.

 

 

표현

 1) 자연어를 이용한 서술적 표현 방법

 - 사람이 사용하는 자연어(언어)를 이용하여 표현

 - 자연어는 서술적이고 사용하는 사람에 따라 일관성과 명확성을 윶지하기가 어려워 누구나 이해하고 사용해야 하는 알고리즘을 표현하는 방법으로 한계가 있다.

 

 2) 순서도(Flow Chart)를 이용한 도식화 표현 방법

 - 알고리즘을 그림으로 도식화하여 표현

 - 순서도의 작성 규칙에 따라 도식화하여 명령의 흐름을 쉽게 파악할 수 있지만, 복잡한 알고리즘을 표현하기에 효과적이진 못하다.

 

3) 프로그래밍 언어

 - 프로그래밍 언어를 이용하여 표현

 - 알고리즘 자체가 실제로 구체화된 구현으로 추가적인 구체화 작업 필요 없음

 - 특정 프로그래밍 언어로 작성된 알고리즘의 경우 그 언어를 모르는 사람의 경우 이해가 어려움

 - 다른 언어로 개발해야 하는 경우 알고리즘을 번역하고 다른 프로그래밍 언어로 변환해야 하는 작업이 추가로 필요

 

4) 의사 코드(Pseudo-code)를 이용한 추상화 방법

 - 특정 프로그래밍 언어가 아니면서 프로그래밍 언어의 형태를 가진 의사 코드를 사용하여 표현

 - 프로그래밍 언어가 아니기에 실행할 수 없지만 일반적인 프로그래밍 언어의 형태를 가지고 있기 때문에, 나중에 특정 프로그래밍 언어로 변환하기 용이함

반응형