인프런 - 강의/1 - 지구에서 제일 쉽게 설명한 자료구조 알고리즘

1-2 자료구조와, 알고리즘은 무엇인가?

개복치 개발자 2019. 9. 12. 22:59

자료구조와 알고리즘에 대한 정의부터 하고 가겠습니다.

 

일단 위키에서는 이렇게 설명하고 있습니다.

 

자료구조(資料構造, 영어: data structure)는 컴퓨터 과학에서 효율적인 접근 및 수정을 가능케 하는 자료의 조직, 관리, 저장을 의미한다.[1][2][3] 더 정확히 말해, 자료 구조는 데이터 값의 모임, 또 데이터 간의 관계, 그리고 데이터에 적용할 수 있는 함수나 명령을 의미한다.[4] 신중히 선택한 자료구조는 보다 효율적인 알고리즘을 사용할 수 있게 한다. 이러한 자료구조의 선택문제는 대개 추상 자료형의 선택으로부터 시작하는 경우가 많다. 효과적으로 설계된 자료구조는 실행시간 혹은 메모리 용량과 같은 자원을 최소한으로 사용하면서 연산을 수행하도록 해준다. 

(출처 - https://ko.wikipedia.org/wiki/%EC%9E%90%EB%A3%8C_%EA%B5%AC%EC%A1%B0 )

 

간단하게 정리하면, 내가 원하는 데이터를 좀 더 쉽고 빠르게 꺼내서 쓰기 위해, 잘 정리된 형태로 데이터를 정렬해놓는 방식 정도로 생각하시면 될 것 같습니다.

 

여기까지 하면, 대충 자료구조라는 것은 검색에 용이하게 자료를 만들어 놓는 것이구나... 라고 생각할 수 있습니다.

 

"저... 근데 컴퓨터 요즘 너무 빠른데 이런게 꼭 필요한가요?"

 

라는 의문이 들 수도 있습니다. 

 

이럴 때, 100만권의 책이 있는 도서관을 생각해봅시다.

 

우리는 100만권의 책이 있는 도서관에서 "I LOVE inflearn" 이라는 책을 찾는 것에 대해 걱정하지 않습니다. 저 100만권을 뒤질 필요 없이 잘 분류된 곳으로 가서 조금만 뒤져보면 책을 찾을 수 있으니깐요. 하지만 얘를 아무 규칙도 없이 무작정 정렬해놓고, 처음부터 끝까지 하나씩 찾는다면, 이 책을 찾는 것은 불가능에 가깝습니다. 성능이 좋은 컴퓨터여도, 처음부터 100만까지 찾으로 가기는 너무 힘들죠... 때문에 데이터를 잘 정리하고, 그 데이터를 잘 찾는 알고리즘이 필요합니다.

 

그런데 갑자기 "실생활에서 자료구조가 사용되는 경우는 무엇이 있나요?" 라는 질문이 들어오면, 어엉?? 이라는 생각이 드실 수 있습니다.

 

방금 예시로 든 도서관을 예시로 들 수도 있고, 브라우저에서 뒤로가기 버튼을 눌렀을 때, 바로 뒷 페이지가 나오는 것도 실생활이라고 할 수도 있고, 뭐 전화번호부 같은 경우도 자료구조가 실생활에 적용된 것이라고 할 수 있습니다.

 

자, 그 다음 알고리즘이라는 것은 무엇일까요?

 

알고리즘(라틴어, 독일어: Algorithmus, 영어: algorithm 알고리듬[*], IPA[ǽlɡərìðm])은 수학 컴퓨터 과학, 언어학 또는 관련 분야에서 어떠한 문제를 해결하기 위해 정해진 일련의 절차나 방법을 공식화한 형태로 표현한 것을 말한다.

 

대부분의 알고리즘은 유한한 수의 규칙에 따라 구별 가능한 기호들을 조작하여 입력 정수에서 출력 정수를 생성하기 위한 일반화된 작업을 정의한다. 다음은 좋은 알고리즘의 특징이다.

  • 정밀성 : 변하지 않는 명확한 작업 단계를 가져야 한다.
  • 유일성 : 각 단계마다 명확한 다음 단계를 가져야 한다.
  • 타당성 : 구현할 수 있고 실용적이어야 한다.
  • 입력 : 정의된 입력을 받아들일 수 있어야 한다.
  • 출력 : 답으로 출력을 내보낼 수 있어야 한다.
  • 유한성 : 특정 수의 작업 이후에 정지해야 한다.
  • 일반성 : 정의된 입력들에 일반적으로 적용할 수 있어야 한다.

( 출처 - https://ko.wikipedia.org/wiki/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98 )

라고 위키에서 설명하고 있습니다.

 

위에 설명한 것 처럼, 알고리즘을 한마디로 설명하라고 하면, 어떠한 문제를 해결하기 위하여 정해진 절차의 과정 이라고 생각하시면 될 것 같습니다.

 

아래와 같은 것도 알고리즘이라고 할 수도 있고

 

 

저희가 술자리에서 종종 하는 UP DOWN 게임도 알고리즘이라고 할 수 있겠죠?

 

여기까지 자료구조와 알고리즘에 대해 살짝 맛을 봤습니다.

 

다음에 계속해서 알아보겠습니다 :)