본문으로 바로가기

 

# 자료구조란 무엇일까?

자료구조는 컴퓨터용어로 설명을 하자면 스택, 리스트, 큐, 사전, 그래프 등의 데이터를 표현하는 형식을 말하는것이다.

일상생활에 비유하여 표를 만들어 설명을하자면,

일상생활속 예 해당하는 자료구조
그릇을 쌓아서 보관하는 것 스택(Stack)
놀이기구 앞에서 서는 줄 큐(Queue)
나의 꿈 버킷 리스트 리스트(List)
영어사전 사전(Dictionary)
지도 그래프(Graph)
컴퓨터디렉토리구조 트리(Tree)

 


# 알고리즘은 무엇일까?

컴퓨터로 문제를 풀기 위한 단계적인 절차.

생활속 예시 : 부모님이 자신의 자식에게 돈 10,000원, 심부름(매개변수 혹은 자료) 다녀오라는 부탁을 주면, 자식이 심부름의 대한 물건과, 거스름돈을 가져오는 결과를 가져오기까지의 과정(리턴값) 이라 볼 수 있다.

 

알고리즘의 조건.

알고리즘의 조건 리스트

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

 

알고리즘의 표현 방법.

  • 영어, 한국어와 같은 자연어
  • 흐름도(Flow Chart)
  • 의사코드(Pseudo-code) <- 가장 많이 표현하는 방식
  • 프로그래밍 언어

 

더보기

자연어로 표기된 알고리즘

인간이 알기 쉽지만, 정확하게 정의하지 않으면 의미전달이 모호해질 우려가 많다.

ArrayMax(list,n)

배열 list의 첫번째 요소를 변수 tmp에 복사
배열 list의 다음 요소들을 차례대로 tmp와 비교하면서 더크면 tmp로 복사
배열 list의 모든 요소를 비교했으면 tmp를 반환

 

흐름도로 표기된 알고리즘

직관적이고 이해하기 쉽지만, 복잡한 경우 표현이 상당히 복잡해진다.

출처 : https://codingisgame.tistory.com/10

유사코드로 표현된 알고리즘

알고리즘 기술에 가장 많이 사용 된다, 프로그램을 구현할때 알고리즘 이외의 내용을 생략하고 알고리즘의 핵심적인 내용에만 집중 할 수 있다.

ArrayMix(list, N);
	largest<-list[0]
    for i<-1 to N-1 do
    	if list[i]>largest
        	then largest<-list[i]
    return largest

 

프로그래밍언어로 표현된 알고리즘

알고리즘의 정확한 기술이 가능하지만, 실제 구현시 많은 알고리즘에 필요없는 사항들이 핵심적인 내용의 이해를 방해할수 있다.

#define MAX_ELEMENTS 100;
int score[MAX_ELEMENTS];

int find_max_score(int n){
	int i,tmp;
    tmp=score[0];
    for(i=;i<n;i++){
    	if(score[i] > tmp){
        	tmp = score[i];
        }
    }

}
개인적으로 프로그래밍 언어는 바로 구현이 가능해서 어떤 결과가 리턴되는지 알기 쉬어 나름의 장단점이 있는거 같다.
알고리즘 구조가 크게되면 직접 전달해주는 사람은 이거 짜느라 머리 아파서 효율적으론 힘들지 모르겠지만....
생각해보니 받는사람도 이게 길어지면 흐름도랑 다를거 없이 머리 아플거 같은건 매한가지..

 


# 자료구조와 알고리즘의 관계는 무엇일까

"프로그램 = 자료구조 + 알고리즘"

자료구조와 알고리즘은 프로그램을 작성할때 연관성이 있는데, 이떄 알고리즘은 넘겨받은 데이터(자료)를 가공하는 방법을 나타내고 자료구조는 이 넘겨 주는 데이터조직의 표현 방법을 나타낸다.

이를 가볍게 일상생활에 비유하면, 블럭 조립을 할때 필요한 블럭의 재료, 모양을 자료구조, 이 블럭을 조립하는 방법과 과정을 알고리즘으로 비유할 수 있다. 

 

 

1주차 첫번째 교시 자료구조 정리하면서 느낀점 : 감각적으로 알고있는 사람이나 이전 고등, 중등 수업때 들었을 수도 있는 알고리즘과 자료구조의 관계를 다시보는 시간이였다. 간단히 생각하면 알고리즘 + 자료구조 = 프로그램 이라 연관성 지어서 생각하면 될거 같은 느낌이다.

자료구조, 알고리즘의 개념과 이것들의 연관성을 이해하면 성공한 수업정리가 될것이다.