19 강 알고리즘과 평가

알고리즘이란?

 

Algorithm 은 어떤 값 또는 값의 집합을 입력으로 하고 어떤 값 또는 값의 집합을 출력으로 하는,
명확하게 정의된(well-defined) 계산 절차다.

 

넓은 의미의 알고리즘

  • 특정 문제를 해결하기 위한 일반적인 절차나 규칙의 모음
    (예시: 도메인 로직의 처리의 흐름, DB에서 레코드를 얻ㅇ어서 적절하게 처리한 후 결과를 출력하는 것)

좁은 의미의 알고리즘

  • 명확하게 정의된 계산문제에 대해 정의된 계산 절차를 수행하는 것 (주로 책에서 다루는 내용)

 

알고리즘을 배우는 의의

알고리즘은 엔지니어에게 공통언어 → 커뮤니케이션을 위해서 알아둘 필요가 있음

유한한 컴퓨터 자원을 효과적으로 활용

알고리즘을 이용하여 새로운 문제에 대처가능

알고리즘의 평가

아래로 갈수록 계산량이 많아진다. 

대규모 데이터를 대상으로 할 경우 O(n log n) 까지가 실용적이다.

 

계산량 개념 적용

  • 시간 계산량(실행시간, 단계 횟수)
  • 공간계산량 (메모리 사용량)

계산량과 상수항

계산량의 Order 표기에서는 "상수항" 을 무시한다.

 

상수항?

함수 호출, 함수로 부처 값을 반환하기 위한 처리, 일차변수를 확하는 처리, if 문으로 분기시키는 처리 등이 이에 해당

→ 실질적으로는  복잡해질 수록 상수항이 계산량에 영향을 미친다. 경우에 따라서 상수항을 줄이는 최적화도 필요하다.

 

최적화시 유의할 점

  • 처음부터 상수항을 줄이는 최적화를 하지 않는다.
  • 현재 프로그램에 무엇이 문제인지를 정확하게 파악 후 최적화 실행

개선시 문제 해결을 위해 규명해야할 사항

  • 알고리즘을 교체해서 개선할 것인가
  • 상수항을 줄여서 개선할 것인가
  • 물리적으로 리소스가 부족하므로 하드웨어를 교환해서 성능을 개선 할것 인가

알고리즘의 실제 활용 → 예측과 측정이 중요

* 단순한 알고리즘이 더 나은 경우도 있다.

* 고전적인 알고리즘이 좋은 경우도 있다.

 

써드파티 소스를 잘 활용하자

정평이 난 알고리즘은 제 3자 이용하기 쉽도록 이미 구현된 소스가 공개되어 있는 경우가 많다.

 

하지만, 이러한 라이브러리를 바로 사용할 수가 없을 수도 있다.

해당 알고리즘이 어떻게 구현이 되어있는지 알아야 한다.

→ 우리가 원하는 사양으로 변경가능

→ 불필요한 구현을 줄여 성능, 유지보수, 테스트, 유연성, 자원 사용 등의 측면에서 다양한 문제를 방지가능

+ Recent posts