gpffh1011
algorithm 본문
복잡하고 어렵게 느껴졌던 알고리즘이라는 단어가,
최근들어 '유튜브 알고리즘'이라는 말로, 이곳저곳에서 유행처럼 사용되며 친숙해졌다.
IT나 프로그래밍에 국한되지않고 자유롭게 사용되는 것이 재미있기는 하지만, 본질을 잘 모르고 사용하고 있다는 생각이 들어 정리해 보았다.
우선 네이버 사전에 검색한 결과이다.
하나의 목표에 도달하기 위해서는 수많은 경로가 있다. 이 경로들을 모~두 모아 알고리즘이라고 표현할 수 있다.
그 경로중에는 단순하고 생각해 내기 쉬우나, 효율적이지 않은 무식한 경로가 있을 것이다. 효율적이진 않지만 정확하게 목표에 도달하는 이러한 알고리즘을 brute force algorithm (->짐승 무력 알고리즘) 라고 한다. 가장 효율적인 방법은 아니지만 이 알고리즘으로부터 더 좋은 알고리즘으로 발전할 가능성이 있기 때문에 컴퓨터 공학에서 brute force algorithm은 중요하게 여겨진다.
그렇다면 좋은 알고리즘이란 무엇일까??
정확성과 효율성을 모두 갖춘 알고리즘을 좋은 알고리즘이라 말할 수 있을 것이다.
여러 실험을 통해서 그 정확성과 효율성이 검증되었다면 00알고리즘 이라는 독자적인 이름이 붙은 네임드 알고리즘이 된다.
아래는 대표적인 7가지 네임드 알고리즘 이다.
- Recursive algorithms
- Dynamic programming algorithm
- Backtracking algorithm
- Divide and conquer algorithm
- Greedy algorithm
- Brute Force algorithm
- 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 |
---|