gpffh1011

algorithm 본문

그외 상식

algorithm

gpffh1011 2020. 7. 1. 00:14

복잡하고 어렵게 느껴졌던 알고리즘이라는 단어가,

최근들어 '유튜브 알고리즘'이라는 말로, 이곳저곳에서 유행처럼 사용되며 친숙해졌다.

IT나 프로그래밍에 국한되지않고 자유롭게 사용되는 것이 재미있기는 하지만, 본질을 잘 모르고 사용하고 있다는 생각이 들어 정리해 보았다.

 

 

우선 네이버 사전에 검색한 결과이다.

쉽게 '문제해결을 위한 단계들의 모임'이라고 설명하는 컴퓨터 과학자도 있다.

 

 

하나의 목표에 도달하기 위해서는 수많은 경로가 있다. 이 경로들을 모~두 모아 알고리즘이라고 표현할 수 있다.

 

그 경로중에는 단순하고 생각해 내기 쉬우나, 효율적이지 않은 무식한 경로가 있을 것이다. 효율적이진 않지만 정확하게 목표에 도달하는 이러한 알고리즘을 brute force algorithm (->짐승 무력 알고리즘) 라고 한다. 가장 효율적인 방법은 아니지만 이 알고리즘으로부터 더 좋은 알고리즘으로 발전할 가능성이 있기 때문에 컴퓨터 공학에서 brute force algorithm은 중요하게 여겨진다.

 

그렇다면 좋은 알고리즘이란 무엇일까??

정확성효율성을 모두 갖춘 알고리즘을 좋은 알고리즘이라 말할 수 있을 것이다.

여러 실험을 통해서 그 정확성과 효율성이 검증되었다면 00알고리즘 이라는 독자적인 이름이 붙은 네임드 알고리즘이 된다.

 

아래는 대표적인 7가지 네임드 알고리즘 이다.

  1. Recursive algorithms
  2. Dynamic programming algorithm
  3. Backtracking algorithm
  4. Divide and conquer algorithm
  5. Greedy algorithm
  6. Brute Force algorithm
  7. Randomized algorithm

좋은 알고리즘을 판별하는 직관적인 방법으로는 같은 문제를 각각의 알고리즘으로 돌려본 후, 그 속도와 코드 길이를 비교해 보는 방법 등이 있다. 물론 문제에 따라 좋은 알고리즘은 매번 다를 것이다. 

 

예) 문제 :  1000p에 달하는 책의 890p를 펴라.

brute force algorithm는 1p 부터 한장씩 넘긴다면, divide and conquer algorithm(-> 나누어서 정복하는 알고리즘)의 경우 절반을 가르고 500~1000p의 책을 또 절반을 가르는 등의 방식으로 목표인 890p에 도달하는 것이다. 이 문제에서는 divide and conquer algorithm이 더욱 빠르고 효율적일 것이다.

 

 

 

상황에 따라서 위처럼 검증된 네임드 알고리즘이라 하여도 효율적이지 못한 알고리즘이 될 수 있다.

 

가장 중요한 것은 나 스스로가 문제해결을 하기위해 어떤 방법을 생각해 내느냐 일 것 이다.

 

 

 

'그외 상식' 카테고리의 다른 글

비디오케이블(VGA/DIV/HDMI/DP)  (0) 2020.06.10