내가 STL에 조예가 깊어서 글을 남기는 것이 아니라, Effecitve STL 을 공부하는 사람들이 이 글을 보고, 도움이 되었으면 하는 생각과, 혹시 내가 틀린것이 있다면 지적해 주시지 않을까 란 생각으로 글을 올리는것임을 미리 밝힙니다. - 최익필


루프는 for, while, do~while 이 있다. 하지만 이것만 보면, 이게 어떤 역활을 하는 루프인지 코드를 봐야지만 가능해진다. .. 뭐 .. 알고리즘도 그런 경우가 있긴 하지만 말이다. ㅋ

더 좋다는 이야기로 주제가 흘러 가는데. 그 이유 3가지를 든다.

첫째, 루프보다 알고리즘이 더 빠르다.
물론 알고리즘 내부에도 루프가 있다.(내부 보면 안다) 하지만 STL 제작자보다 사용자가 더 깊게 알기는 힘든면이 많다. 그렇기 때문에 STL 제작자가 알고리즘에 어떤 최적화를 해 놓았다. 그래서 루프보다 알고리즘이 대개의 경우 더 빠르다.

둘째, 루프보다 알고리즘이 더 안정적이다.
루프는 사용자가 직접 만들어 돌리기 때문에, 문제가 발생할 경우가 있다. 하지만 알고리즘은 이미 검증되었던 코드이므로 더 안정적이다.

셋째, 루프보다 알고리즘이 더 보기 쉽다.
루프를 사용한다면, 그 코드가 길게 늘어져 있을 것이다. 이것은 가독하기 어렵게 되는 경우가 많이 생긴다. 하지만 알고리즘을 사용하면, 몇줄의 코드가 몇십줄의 코드를 대처하게 되어 가독성을 높일수 있다.
가독성을 높이면, 유지 보수가 좀더 편해진다.


첫번째에 많이들 의문점이 생기는것 같다. 왜냐하면 몇몇 알고리즘 내부는 루프를 사용하기 때문이다. 이런 류의 알고리즘은 크게 성능이 좋지는 않을 것이다. 그렇다고 더 느리지도 않는다. 그러므로 둘째와 셋째의 이득으로 알고리즘을 사용하는게 더 좋다.

만약 map 안의 대이터를 찾는다고 생각할 때 알고리즘을 쓰면 로그시간안에 찾을수 있을 것이다. 하지만 루프를 돌려서 찾고자 한다면, 선형시간이 걸릴 것이다.

물론 최적화 시키면 로그시간까지 끌어 올릴수 있겠지만, ... 이미 알고리즘이 로그시간이기에 굳이 만들 시간을 소모하는것보다 알고리즘 쓰는게 더 좋다는 이야기 이다. 공부의 목적이라면 직접 만드는게 더 좋겠지만 말이다.^^


관련링크
http://oldpie.yoonkn.com/cgi-bin/moin.cgi/EffectiveStlSum7#head-0a3bc78a3c7dbb8f7b628535f85accb9dc8ba157
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기