tsp (travelling salesman problem)

1. intro

유명한 문제 tsp 는 링크에서 자세한 설명을. http://en.wikipedia.org/wiki/Travelling_salesman_problem 문제를 요약하자면, n 개의 도시가 주어지고, 각 도시간의 거리가 주어질 때, 모든 도시를 가장 최소의 거리로 이동하는 경로를 찾는 문제이다. 이 문제는 대표적인 NP-Hard 문제이며, time complexity 는 O(2^n) 이다.

2. 풀이

2.1. 모든 경우의 수에 대해 값 구하기

이렇게 하면 물론 안 되겠지만, 모든 경로의 수는 입력 도시 수 n 에 대해서 n ! 이다. 입력이 10 개라면 3,628,800 개이다. 20개라면 ? 2,432,902,008,176,640,000 … 구하기 싫어질 듯. (factorial 에 대해서는 다음 참고 : http://en.wikipedia.org/wiki/Factorial) 이렇게 하면 풀 수 없다는 것만 알고 넘어가자.

더 보기

sum of subset problem

이것은 대략 숫자의 set 에서 요놈의 부분집합의 합으로 0 을 만들 수 있는 지 여부를 체크하는 문제이다. 예를 들면, 주어진 집합 { −7, −3, −2, 5, 8} 에서 부분집합 { −3, −2, 5} 합은 0 이 될 수 있다.

더 보기

full search 코드

대략 문제를 풀 때, 하는 수 없이 모든 경우의 수를 뒤져야 하는 경우가 있다. 이런 경우 반복문 또는 재귀(recursion)를 통해 모든 경우의 수를 체크해야 한다. 요런 문제로써, 줄 세우기, n 개 중 m 개 뽑기, 모든 부분 집합 찾기, 트리 탐방 …. 등의 케이스가 있다.

더 보기