1. Breadth First Search (너비우선검색)


뿌리마디를 먼저 검색한 후 수준 1에 있는 모든 마디를 검색한다. (왼쪽에서 오른쪽으로)

다음에 수준 2에 있는 모든 마디를 검색한다. (왼쪽에서 오른쪽으로)

Queue(큐)를 사용한다.


      




2. Branch and Bound (분기한정법)


tree를 가로 지르는 특별한 방법을 제한하지 않는다.

최적화 문제에만 사용된다.


- 진행절차

  ㄱ. 한 노드에서 bound(경계)를 계산하여 노드가 유망한 지 판단한다.

  ㄴ. bound는 노드를 넘어 확장하여 얻을 수 있는 솔루션 값이다.

  ㄷ. 그 bound가 지금까지 발견된 최상의 솔루션보다 낫지 않다면, 노드는 유망하지 않다. 그렇지 않으면 유망하다.



3. Breath First Search 예


Traveling Salesperson Problem


세일즈맨의 집이 위치하고 있는 도시에서 출발하여 다른 도시들을 각각 한번씩만 방문하고, 

다시 집으로 돌아오는 가장 짧은 일주여행경로를 결정하는 문제이다.


일주여행경로(Hamiltonian circuits)는 한 정점을 출발하여 다른 모든 정점을 한번씩만 거쳐서

다시 그 정점으로 돌아오는 경로이다.


여러 개의 일주여행경로 중에서 길이가 최소가 되는 경로를 찾는 것이 Traveling Salesperson Problem이다.


            


 ** Bound

 :  [1 ... k]의 여행경로를 가진 노드의 한계치 


   A = V - [1 ... k]라 가정할 때,

     (1) 경로 [1...k]의 길이 

  + (2) 로부터 A에 속한 정점으로 가는 이음선 길이 중 최소치

  + (3) 로부터 에 속한 정점으로 가는 이음선 길이 중 최소치


'Algorithm' 카테고리의 다른 글

백준 10828번: 스택  (0) 2018.07.17
백준 1260번: DFS와 BFS  (0) 2018.04.18
DFS (Depth-First Search)  (0) 2018.04.12
백준 1003번: 피보나치 함수  (0) 2018.04.10
Dynamic Programming (다이나믹 프로그래밍)  (1) 2018.04.10

+ Recent posts