본문 바로가기

(비정기) Dlbo's Post

코드 최적화, 어떻게, 왜 하는걸까?

아...

비가 쩔어주게 오네요.

책 제본뜨러 가야 하는데;;

----------------------------------------------------------------------------------------

요즘은 컴퓨터가 워낙에 빨라져서 코드 최적화에 대해 대학이나 여타 여러곳에서 잘 언급을

하지 않는 것 같습니다. 그래도 KOI 준비하는 학생분들은 시간적 옵티마이즈에 목숨을 걸지요 =ㅁ=

최대한 빠르게 동작해야 하니까요.

예전의 느린 컴퓨터에서는 시간을 줄이기 위한 최적화가 종종 이루어 졌습니다.

물론 요즘도 실행시간을 줄이기 위한 시도(암호깨기...)가 종종 이루어 지지만 말이지요.

사용자 삽입 이미지

추...추억의 286입니다 -_-;

저때만 해도 느린 컴퓨터 덕분에 시간 차원의 옵티마이즈가 필요했습니다.

http://retirno.pe.kr/117?srchid=BR1http%3A%2F%2Fretirno.pe.kr%2F117

소수판별법의 기본형입니다.

n의 데이터에 대해 최악의 경우 a의 시간이 걸리지요 -_-;

http://tblog.javaf.net/541?srchid=BR1http%3A%2F%2Ftblog.javaf.net%2F541

이건 소수판별법의 소규모 변형입니다.

합성수의 약수들이 루트n을 기준으로 좌우대칭형으로 존재하기 때문에

루트n까지만 조사하면 된다는 특성을 이용한 변형 알고리즘이지요.

그래도 필요한 시간복잡도는 루트n입니다.

http://dlbo.tistory.com/305

밀러-라빈 소수판별법이라는 확률론적인 소수판정법입니다.

n에 대해 k회의 소수판정을 실시했을때, n의 소수판정이 틀릴 확률은 2의 k승입니다.

n의 크기에 따라 (약 20 정도) 일반 소수판별보다 느릴 수 있으나,

수가 커지면 커질수록 매우 빠른 속도효율을 얻게 되지요.

사용자 삽입 이미지

대략 요런 느낌이랄까 =ㅁ=

이런 방식을 알고리즘 측면의 속도 옵티마이즈라 합니다.

그런데 코드가 난잡해져 읽기 힘들어지면,

아무래도 직장 상사한테 싸다구를

사용자 삽입 이미지

요걸로 후려맞겠죠 -_-;;

대표적인 예시를 보지요.

http://dlbo.tistory.com/196

트리 서밍 문제의 일반적인 해답 코드입니다.

그리고...



전설의 숏코더 cozy ozy(ozy4dm)의 gcc 코드입니다. -_-;;

이런 것을 맹목적인 속도 옵티마이즈라고 합니다.

알고리즘 차원에서도 옵티마이즈를 했으나,

코드의 가동속도를 최대한 끌어올리기 위해 온갖 변태짓을 해 실행해야 할 기계어 코드를

최대한 대폭 줄여버리는 것이지요.

아, 물론 이방법도 기계어코드를 직접 터치해버리는 방식에는 미치지 못하긴 합니다 =ㅁ=

그래도.

이렇게 했다간 상사한테 후들겨 맞기 좋답니다 -_-;

또 다른 최적화로써 메모리 공간의 옵티마이즈 방식이 있습니다.

http://zfanta.com/entry/for문-10000번-VS-노가다-타이핑-10000번

ㅋㅋㅋㅋㅋㅋ 환타님의 포스트입니다.

파일 크기의 문제도 발생하지만,

문제는 저 파일 내용을 고.대.로 메모리에 로드한다는것도 문제입니다.

이 경우는 컴파일러가 멍청(?)해서 생긴 경우지만,

좀 복잡한 코드가 될 경우 프로그래머가 직접 구조를 변경해 사용할 메모리를 줄여주어야 하지요.

메모리 사용량은 곧 전력소모와도 연결되기 때문에,

요즘 유행하는 임베디드 시스템에서의 '저전력' 설계와도 연관되게 됩니다.

한번에 최대한 적은 데이터가 이동하면서 모든 일을 처리해야 하는 형태이지요.

사용자 삽입 이미지

아무리 아이폰이 잘났어도 10초만에 꺼지면 눈물나겠지요? -_-;;

그렇다고 해서

사용자 삽입 이미지

요러시면 안됩니다 =ㅁ=;;

------------------------------------------------------------------------------------------------

크흠. 뭔가 글이 상당히 산만한거 같네요 ㄱ-