더북(TheBook)

그림 1-10 (b)에서 3번으로 표시한 위치가 올바른 위치처럼 보이지만 이 알고리즘에서는 그 위치가 전역 최적 지점인지는 증명되지 않는다. 즉, 그 지점이 한 칸 떨어진 네 개의 교차로에 비하면 나은 지점인 것은 맞지만 여러 블록 떨어진 다른 교차로보다 나은 위치인지는 분명하지 않다. 다행히 이렇게 구한 위치는 최선의 위치는 맞는데 이 퍼즐을 일반화시킨 위치 선택 퍼즐(2.074)을 풀고 나면 이 방법으로 구한 위치가 전역 최적 지점이라는 것을 알 수 있을 것이다.

다음 퍼즐도 반복 향상으로 풀 수 있다.

양수로 바꾸기 실수가 적힌 m × n 표가 주어져 있다고 가정하자. 특정 행이나 열에 있는 값들의 모든 부호를 반대로 바꾸는 연산만 할 수 있다고 할 때 각 행의 합과 각 열의 합이 모두 음이 아니도록 만들 수 있는 알고리즘이 있을까?

각 단계마다 합이 음수가 아닌 줄(행과 열) 수가 증가하는 알고리즘을 찾아보는 것이 가장 자연적인 방법일 것이다. 하지만 합이 음수인 행(열)의 모든 수의 부호를 뒤집다 보면 다른 열(행)의 합이 음수로 바뀔 수 있다. 표에 있는 수의 총합을 따져보는 식으로 이 문제를 깔끔히 해결할 수 있다. 모든 수의 총합은 각 행의 합을 모두 더하거나 각 열의 합을 모두 더해 계산할 수 있는데 합이 음수인 줄에 있는 수의 부호를 모두 바꿔주면 표에 있는 모든 수의 합은 당연히 증가하게 되어 있다. 따라서 합이 음수인 줄을 계속 찾아주면 된다. 그런 줄이 있으면 그 줄에 있는 모든 수의 부호를 뒤집어준다. 그런 줄이 없으면 목표가 달성된 것이므로 멈춘다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.