알고리즘 & 데이터구조

컴퓨터/알고리즘&자료구조

728x90
반응형

알고리즘? 데이터 구조? 자료구조?

프로그래밍을 공부하다 보면 한 번씩은 들어보는 말입니다. 과연 이 녀석들은 무엇일까요?

알고리즘 그리고 데이터 구조에 대하여 조금 알아보고 도대체 왜 필요한지 알아보도록 합시다.

 

알고리즘

알고리즘은 - 어떠한 문제를 해결하기 위한 절차 또는 방법을 일컫는 단어입니다.

예를 들어 아침에 최단거리로 출근하기 위한 대중교통 수단을 찾는 것도 알고리즘이라고 말할 수 있습니다.

 

하지만 프로그래밍에서 알고리즘은 조금 더 심화돼서 바라볼 필요가 있습니다.  어떠한 문제점을 찾고 해결방법을 떠올린 후 프로그래밍에서 적용하여 구현까지 시켜야 프로그래밍에서 완벽한 알고리즘이라고 할 수 있습니다. 

현재 이미 널리 알려진 알고리즘 기법들이 존재합니다. 개념에 대해서 배우고 어떠한 문제가 찾아왔을 때 알고리즘 기법들을 적용해서 해결을 구현할 수 있어야 프로그래밍에서 진정한 알고리즘을 배운다고 할 수 있습니다.

 

알고리즘의 조건

프로그래밍에서 알고리즘이 성립되려면 아래와 같은 전제조건이 필요합니다.

  • 입력 - 입력값의 존재가 필요하다.
  • 출력 - 적어도 1개 이상의 결과가 필요하다.
  • 명확성 - 수행 과정이 정확해야 된다
  • 유한성 - 무한하게 수행하는 것이 아닌 종료되는 시점이 존재해야 한다.
  • 효율성 - 모든 과정은 명백하게 실행과 검증이 가능해야 한다.

이런 명확하게 실행과 결과가 이루어질 수 있어야만 알고리즘이라고 할 수 있습니다.

 

알고리즘의 평가

어떠한 문제를 풀 수 있는 알고리즘 기법은 정말 다양할 수 있습니다. 예를 들어 인천 공항에서 서울 강남까지 가는 방법은 정말 여려가지일 것입니다. 가는 방법은 정말 다양할 것입니다. 시간과 비용이 얼마나 드냐의 차이가 있을 뿐이죠. 

컴퓨터 프로그램에서 알고리즘 또한 같습니다. 문제를 해결하는데 걸리는 시간을 고려한 평가와 메모리 자원을 얼마나 소비하느냐에 대한 평가 가 있습니다.

  • 시간 복잡도의 평가
  • 공간 복잡도의 평가

이런 평가들을 이용해 다양한 표기법으로 그 알고리즘에 대한 평가를 할 수 있습니다.

표기법으로 Big-O 표기법 등등이 있는데 추후에 좀 더 자세히 설명하도록 하겠습니다.

 

데이터 구조 (자료 구조)

데이터 구조란 프로그램에서 수많은 데이터를 어떠한 형태로 표현을 하느냐입니다. 

많은 양의 데이터를 저장하고 효율적으로 쓰기 위해서 만들어 놓은 데이터들의 구조들을 일컫습니다.

프로그래밍에서 기본 자료형 또한 데이터 구조의 한 범위입니다. (메모리에 어떠한 형태로 데이터를 올리는 형식이 차이가 있기 때문이죠.)

 

데이터 구조기법 또한 엄청나게 많이 알려져 있고 사용되고 있습니다.  프로그래밍에서 자료구조는 알고리즘과 함께 문제를 극복하고 해결이 되는 필수적인 요소입니다. 변수의 한계를 극복하기 위한 자료 구조인 배열처럼 오늘날 프로그래밍에서 자료구조는 조금 더 효율적인 프로그래밍을 하기 위한 필수 공부 내용 중 하나입니다.

 

데이터 구조와 알고리즘 어떤 게 더 중요한가? 무엇을 먼저 배워야 되나?

결론부터 말하자면 둘 다 필수적인 요소라고 생각합니다. 수동적으로 시키는 일만 하는 기계적인 프로그래머가 아니라면 어느 정도 자신이 사용하는 프로그래밍 언어의 문법이 익숙해지면 데이터 구조와 알고리즘을 배울 준비를 해야 될 것입니다.

데이터 구조와 알고리즘은 컴퓨팅 사고력을 늘리는 가장 기초적인 요소라고 생각합니다. 그리고 그 두 개는 서로 비슷한 개념과 목적을 위해서 태어났고 서로 상호작용하는 관계입니다. 

문제를 해결하기 위해 알고리즘 기법들이 탄생했으며, 효율적으로 알고리즘 기법들을 활용하기 위해 데이터 구조를 만들고 이 데이터 구조를 활용한 더 좋은 알고리즘 기법들이 활용됩니다. 

지금 우리는 알고리즘을, 데이터 구조를 개발하고 개척하는 단계가 아닙니다. 프로그래밍을 배우며 가진 기술들의 한계 점을 찾고 고민할 때 알고리즘과 데이터 구조의 개념을 익히고 적용하면 조금 더 본인들의 프로그래밍 스킬 그리고 컴퓨팅 파워가 늘어날 수 있을 겁니다.

 

728x90
반응형

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :