알고리즘(algorithm) backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf ·...

47
알고리즘 알고리즘(Algorithm) (Algorithm) 알고리즘 알고리즘(Algorithm) (Algorithm) Backtracking ( Backtracking (되추적 되추적) 2011 2011년 봄학기 봄학기 강원대학교 강원대학교 컴퓨터과학전공 컴퓨터과학전공 문양세 문양세

Upload: others

Post on 25-Mar-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

알고리즘알고리즘(Algorithm) (Algorithm) 알고리즘알고리즘(Algorithm) (Algorithm) Backtracking (Backtracking (되추적되추적))g (g (되추적되추적))

20112011년년 봄학기봄학기

강원대학교강원대학교 컴퓨터과학전공컴퓨터과학전공 문양세문양세강원대학교강원대학교 컴퓨터과학전공컴퓨터과학전공 문양세문양세

Page 2: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

되추적되추적(backtracking)?(backtracking)?Backtracking

갈림길에 표시를 해 두었더라면…

Computer Algorithmsby Yang-Sae MoonPage 2

간단히 말해서 되추적은 갈림길에 표시를 해 두는 기법이다.

Page 3: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

강의강의 순서순서Backtracking

되추적 기술

n-Queens Problem

Monte Carlo Technique

Graph Coloring

Hamiltonian Circuits

Computer Algorithmsby Yang-Sae MoonPage 3

Page 4: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

깊이우선검색깊이우선검색 (Depth(Depth--first search) (1/2)first search) (1/2)Backtracking

루트 노드(root node)를 먼저 방문한 뒤, 그 노드의 모든 후손

노드(descendant)들을 차례로(보통 왼쪽에서 오른쪽으로) 노드(descendant)들을 차례로(보통 왼쪽에서 오른쪽으로)

방문한다. (= preorder tree traversal).

void depth_first_tree_search(node v){{

node u;

visit v;for (each child u of v) // from left to right

depth first tree search(u)depth_first_tree_search(u)}

Computer Algorithmsby Yang-Sae MoonPage 4

Page 5: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

깊이우선검색깊이우선검색 (Depth(Depth--first search) (2/2)first search) (2/2)Backtracking

예제

Computer Algorithmsby Yang-Sae MoonPage 5

Page 6: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

44--Queens Problem (1/2)Queens Problem (1/2)Backtracking

4개의 Queen을 서로 상대방을 위협하지 않도록 4 4 서양장

기(chess)판에 위치시키는 문제이다기(chess)판에 위치시키는 문제이다.

서로 상대방을 위협하지 않기 위해서는 같은 행이나, 같은 열

이나 같은 대각선 상에 위치하지 않아야 한다 다음 페이지이나, 같은 대각선 상에 위치하지 않아야 한다. (다음 페이지)

무작정 알고리즘

• 각 Queen을 각각 다른 행에 할당한 후에, 어떤 열에 위치하면 해답은

얻을 수 있는지를 차례대로 점검해 보면 된다.얻을 수 있는지를 차례대 점검해 면 된다

• 이때, 각 Queen은 4개의 열 중에서 한 열에 위치할 수 있기 때문에, 해답을 얻기 위해서 점검해 보아야 하는 모든 경우의 수는해 기 위해서 해 아야 하 경우의 수

4 4 4 4 = 256가지가 된다.

Computer Algorithmsby Yang-Sae MoonPage 6

Page 7: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

44--Queens Problem (2/2)Queens Problem (2/2)Backtracking

무슨 말인고 하니…

•첫째 행에 올 수 있는 경우의 수 = 4•첫째 행에 올 수 있는 경우의 수 = 4

•둘째 행에 올 수 있는 경우의 수 = 4

•셋째 행에 올 수 있는 경우의 수 = 44 4 4 4 = 256가지

Computer Algorithmsby Yang-Sae MoonPage 7

•넷째 행에 올 수 있는 경우의 수 = 4

Page 8: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

44--Queens Queens 문제의문제의 상태공간트리상태공간트리Backtracking

상태공간트리: State Space Tree

i번째 말이 j번째 열에…

Computer Algorithmsby Yang-Sae MoonPage 8

Page 9: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

상태공간트리의상태공간트리의 이용이용Backtracking

루트 노드에서 리프 노드(leaf node)까지의 경로는 해답후보

(candidate solution)가 되는데 깊이우선검색을 하여 그 해답(candidate solution)가 되는데, 깊이우선검색을 하여 그 해답

후보 중에서 해답을 찾을 수 있다.

그러나 이 방법을 사용하면 해답이 될 가능성이 전혀 없는 노그러나 이 방법을 사용하면 해답이 될 가능성이 전혀 없는 노

드의 후손노드(descendant)들도 모두 검색해야 하므로 비효

율적이다율적이다.

Computer Algorithmsby Yang-Sae MoonPage 9

Page 10: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

상태공간트리의상태공간트리의 이용이용Backtracking

노드의 유망성(promising):

• 전혀 해답이 나올 가능성이 없는 노드는 유망하지 않다(non promising)• 전혀 해답이 나올 가능성이 없는 노드는 유망하지 않다(non-promising)고 하고(해당 노드의 서브트리 검색은 무의미),

• 그렇지 않으면 유망하다(promising)고 한다• 그렇지 않으면 유망하다(promising)고 한다.

되추적이란?

• 어떤 노드의 유망성을 점검한 후, 유망하지 않다고 판정이 되면

(그 노드의 후손 노드(서브 트리)들에 대한 검색을 중지하고,그 노드의 부모노드(parent)로 돌아간다(“backtrack”) 그 노드의 부모노드(parent)로 돌아간다( backtrack ).

• 그런 다음, 다시 후손 노드에 대한 검색을 계속하게 되는 절차이다.

Computer Algorithmsby Yang-Sae MoonPage 10

Page 11: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

되추적되추적 알고리즘의알고리즘의 개념개념Backtracking

되추적 알고리즘은 상태공간트리에서 깊이우선검색을 실시하는데,

• 유망하지 않은 노드들은 가지쳐서(pruning) 검색을 하지 않으며 • 유망하지 않은 노드들은 가지쳐서(pruning) 검색을 하지 않으며,

• 유망한 노드에 대해서만 그 노드의 자식노드(children)를 검색한다.

이 알고리즘은 다음과 같은 절차로 진행된다이 알고리즘은 다음과 같은 절차로 진행된다.

1.상태공간트리의 깊이우선검색을 실시한다.

각 노드가 유망한지를 점검한다2.각 노드가 유망한지를 점검한다.

3.만일 그 노드가 유망하지 않으면, 가지치기를 수행하고,그 노드의 부모노드로 돌아가서 검색을 계속한다그 노드의 부모노드로 돌아가서 검색을 계속한다.

Computer Algorithmsby Yang-Sae MoonPage 11

Page 12: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

일반적인일반적인 되추적되추적 알고리즘알고리즘Backtracking

id h k d ( d )void checknode(node v){if (promising(v))if (promising(v))if (there is a solution at v)write the solution;

elsefor (each child u of v)

h k d ( )checknode(u);}

Computer Algorithmsby Yang-Sae MoonPage 12

Page 13: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

44--Queens Queens 문제의문제의 되추적되추적 상태공간트리상태공간트리 (1/2)(1/2)Backtracking

Computer Algorithmsby Yang-Sae MoonPage 13

Page 14: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

44--Queens Queens 문제의문제의 되추적되추적 상태공간트리상태공간트리 (2/2)(2/2)Backtracking

Computer Algorithmsby Yang-Sae MoonPage 14

Page 15: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

깊이우선검색깊이우선검색 vs. vs. 되추적되추적Backtracking

검색하는 노드 개수의 비교

• 순수한 깊이우선검색 = 155 노드

(전체는 (1+4+16+64+256)개이나, 그 이전에 솔루션(2 4 1 3)이 찾아지므로 )그 이전에 솔루션(2-4-1-3)이 찾아지므로…)

• 되추적 = 27 노드

Computer Algorithmsby Yang-Sae MoonPage 15

Page 16: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

44--Queens Queens 문제문제: : 개선된개선된 되추적되추적 알고리즘알고리즘Backtracking

void checknode(node v){

if (promising(v))

void expand(node v){

for (each child u of v)

if (promising(v))if (there is a solution at v)

write the solution;else

for (each child u of v)checknode(u);for (each child u of v)

if (promising(u))if (there is a solution at u)

it th l ti

checknode(u);}

write the solution;else

expand(u);

개선된 알고리즘은 유망성 여부의 점검을 노드를 방문하기 전에 실시하

만 방 할 의 가 적어져서 더 효율적이다

}

므로, 그만큼 방문할 노드의 수가 적어져서 더 효율적이다.

그러나 일반 알고리즘이 이해하기는 더 쉽고, 일반 알고리즘을 개량된 알

고리즘으로 변환하기는 간단하다 고리즘으로 변환하기는 간단하다.

따라서, 앞으로 이 강의에서의 모든 되추적 알고리즘은 일반 알고리즘과

같은 형태로 표시한다

Computer Algorithmsby Yang-Sae MoonPage 16

같은 형태로 표시한다.

Page 17: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

강의강의 순서순서Backtracking

되추적 기술

n-Queens Problem

Monte Carlo Technique

Graph Coloring

Hamiltonian Circuits

Computer Algorithmsby Yang-Sae MoonPage 17

Page 18: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

nn--Queens Problem Queens Problem –– 개요개요Backtracking

n개의 Queen을 서로 상대방을 위협하지 않도록 n n 서양장

기(chess) 판에 위치시키는 문제이다기(chess) 판에 위치시키는 문제이다.

서로 상대방을 위협하지 않기 위해서는 같은 행이나, 같은 열

이나 같은 대각선 상에 위치하지 않아야 한다이나, 같은 대각선 상에 위치하지 않아야 한다.

n-Queens 문제의 되추적 알고리즘: Q 4-Queens 문제를 n-Queens 문제로 확장 시키면 된다.

Computer Algorithmsby Yang-Sae MoonPage 18

Page 19: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

Backtrackingnn--Queens Problem Queens Problem –– 알고리즘알고리즘 (1/3)(1/3)

유망함수 구현을 위해, col[i]가 i-번째 행에서(즉, i-번째) Queen이놓여있는 열이라 하자.놓여있는 열이라 하자

먼저, 같은 열에 있는지 검사하기 위해서는 col[i] = col[k]이 성립하

는지 검사하면 된다는지 검사하면 된다.

다음으로, 같은 대각선에 있는지 검사하기 위해서는 다음 등식이

성립하는지 검사하면 된다성립하는지 검사하면 된다.

|col[i] – col[k]| = |i – k|

열의 차이 = 행의 차이

Computer Algorithmsby Yang-Sae MoonPage 19

Page 20: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

Backtrackingnn--Queens Problem Queens Problem –– 알고리즘알고리즘 (2/3)(2/3)

A Backtracking Algorithm for the n-Queens Problemvoid checknode(node v){void queens(index i)

{index j;

{if (promising(v))

if (there is a solution at v)write the solution;

elsefor (each child u of v)

if(promising(i))if(i == n)

cout << col[1] through col[n];

for (each child u of v)checknode(u);

}

[ ] g [ ];else

for(j=1;j <= n;j++) {col[i+1] = j; // 다음 위치 선택col[i+1] = j; // 다음 위치 선택queens(i+1);

}}}

최상위 수준 호출: queens(0);

Computer Algorithmsby Yang-Sae MoonPage 20

최상위 수준 호출: queens(0);

Page 21: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

Backtrackingnn--Queens Problem Queens Problem –– 알고리즘알고리즘 (3/3)(3/3)

A Backtracking Algorithm for the n-Queens Problem (계속)

bool promising(index i){

index k = 1;index k 1;bool switch = true;while(k < i && switch) { // k <= n

if(col[i] == col[k] || |col[i]-col[k]| == |i-k|)if(col[i] == col[k] || |col[i]-col[k]| == |i-k|)swicth = false;

k++;}}return switch;

}

Computer Algorithmsby Yang-Sae MoonPage 21

Page 22: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

Backtrackingnn--Queens Problem Queens Problem –– 분석분석 1 (1/2)1 (1/2)

상태공간트리 전체에 있는 노드의 수를 구함으로서, 가지 친 상태

공간트리의 노드의 개수의 상한을 구한다공간트리의 노드의 개수의 상한을 구한다.

깊이가 i인 노드의 개수는 ni개 이고, 이 트리의 깊이는 n이므로,

노드의 총 개수는 상한( b d)은 다음과 같다노드의 총 개수는 상한(upper bound)은 다음과 같다.1

2 3 11n

n nn n n n

11

n n n nn

n

Recall2 3

01

1

1

i n

in

r r r r r

r

11

rr

Computer Algorithmsby Yang-Sae MoonPage 22

Page 23: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

Backtrackingnn--Queens Problem Queens Problem –– 분석분석 1 (2/2)1 (2/2)

따라서 n = 8일 때, 로 계산된다. 98 1 19,173,9618 1

그러나 이 분석은 별 가치가 없다. 왜냐하면 되추적함으로서 점검

하는 노드 수를 줄이게 되기 때문이다.

즉, 되추적을 통해 점검 노드 수를 얼마나 줄였는지는 상한값을 구

해서는 전혀 알 수 없기 때문이다해서는 전혀 알 수 없기 때문이다.

Computer Algorithmsby Yang-Sae MoonPage 23

Page 24: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

Backtrackingnn--Queens Problem Queens Problem –– 분석분석 22

유망한 노드만 세어서 상한을 구한다.

이 값을 구하기 위해서는 어떤 두 개의 Q 이 동일한 열에 위치이 값을 구하기 위해서는 어떤 두 개의 Queen이 동일한 열에 위치

할 수 없다는 사실을 이용하면 된다.

예를 들어 n = 8일 경우를 생각해 보자.

• 첫 번째 Queen은 어떤 열에도 위치시킬 수 있다.

• 두 번째는 기껏해야 남은 7열 중에서만 위치시킬 수 있다.

• 세 번째는 남은 6열 중에서 위치시킬 수 있다.

• 이런 식으로 계속했을 경우 노드의 수는 1 + 8 + 8 7 + 8 7 6 + …+ 8! = 109,601가 된다. (여기서 1 = root)

이 결과를 일반화 하면 유망한 노드의 수의 하한은 다음과 같다이 결과를 일반화 하면 유망한 노드의 수의 하한은 다음과 같다.

1 ( 1) ( 1)( 2 ) !n n n n n n n

Computer Algorithmsby Yang-Sae MoonPage 24

Page 25: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

Backtrackingnn--Queens Problem Queens Problem –– DiscussionDiscussion

앞서의 두 가지 분석 방법은 알고리즘의 복잡도를 정확히 얘기 해

주지 못하고 있다 주지 못하고 있다.

왜냐하면:

• 대각선을 점검하는 경우를 고려하지 않았다. 따라서 실제 유망한 노드의 수

는 훨씬 더 작을 수 있다.

유망하지 않은 노드를 포함하고 있는데 실제로 해석의 결과에 포함된 노드• 유망하지 않은 노드를 포함하고 있는데, 실제로 해석의 결과에 포함된 노드

중에서 유망하지 않은 노드가 훨씬 더 많을 수 있다.

(이는 우리가 checknode() 대신에 expand()를 사용하여 알고리즘을 작성했( 이는 우리가 () 대신에 p ()를 사용하여 알고리즘을 작성했

기 때문이다. 이는 expand()를 사용하여 작성하면 해결할 수 있다.)

Computer Algorithmsby Yang-Sae MoonPage 25

Page 26: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

Backtrackingnn--Queens Problem Queens Problem –– 분석분석 33

유망한 노드의 개수를 정확하게 구하기 위한 유일한 방법은 실제

로 알고리즘을 수행하여 구축된 상태공간트리의 노드의 개수를로 알고리즘을 수행하여 구축된 상태공간트리의 노드의 개수를

세어보는 수 밖에 없다.

그러나 이 방법은 진정한 분석 방법이 될 수 없다 왜냐하면 분석그러나 이 방법은 진정한 분석 방법이 될 수 없다. 왜냐하면 분석

은 알고리즘을 실제로 수행하지 않고 이루어져야 하기 때문이다.

(또한 입력 개수 은 매번 달라질 수 있기 때문이다 )(또한, 입력 개수 n은 매번 달라질 수 있기 때문이다.)

그럼, 정확한 분석은 어떻게 하나?

Monte Carlo Technique (확률적 알고리즘)

Computer Algorithmsby Yang-Sae MoonPage 26

Page 27: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

Backtrackingnn--Queens Problem Queens Problem –– 알고리즘의알고리즘의 수행수행 시간시간 비교비교

되추적 없이 상태공간트리를 깊이우선검색으로 모든 노드를 검색하는 알고리즘

두 개의 Queen은 같은 행이나 같은 열에 올 수 없다는 제한만을 이용한 알고리즘

제안한 되추적 알고리즘 (같은 행 열 대각선에 올 수 없다는 제한을 이용)

checknode() 대신 expand()를 사용하여 유망노드 검색을 먼저 하는 알고리즘

제안한 되추적 알고리즘 (같은 행, 열, 대각선에 올 수 없다는 제한을 이용)

Computer Algorithmsby Yang-Sae MoonPage 27

Page 28: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

강의강의 순서순서Backtracking

되추적 기술

n-Queens Problem

Monte Carlo Technique

Graph Coloring

Hamiltonian Circuits

Computer Algorithmsby Yang-Sae MoonPage 28

Page 29: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

BacktrackingMonte Carlo Technique?Monte Carlo Technique?

Monte Carlo 기법은 어떤 입력이 주어졌을 때 점검하게 되는 상태

공간트리의 “전형적인” 경로를 무작위(random)로 생성하여 그공간트리의 전형적인 경로를 무작위(random)로 생성하여 그

경로 상에 있는 노드의 수를 센다.

상기 과정을 여러 번 반복하여 나오는 결과의 평균치를 추정치로상기 과정을 여러 번 반복하여 나오는 결과의 평균치를 추정치로

사용한다. (확률적 복잡도를 구한다.)

이 기법을 적용하기 위해서는 다음 두 조건을 만족하여야 한다.

• 상태공간트리의 같은 수준(level)에 있는 모든 노드의 유망성 여부를

점검하는 절차는 같아야 한다.

• 상태공간트리의 같은 수준에 있는 모든 노드는 반드시 같은 수의 자

식노드를 가지고 있어야 한다.

n-Queens 문제는 위 두 조건을 모두 만족한다.

Computer Algorithmsby Yang-Sae MoonPage 29

n Queens 문제는 위 두 조건을 모두 만족한다.

Page 30: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

BacktrackingMonte Carlo Technique Monte Carlo Technique –– nQueens (1/4)nQueens (1/4)

1. 루트 노드의 유망한 자식노드의 개수를 m0라고 한다.

2 상태공간트리의 수준 1에서 유망한 노드를 하나 랜덤하게 정하고 2. 상태공간트리의 수준 1에서 유망한 노드를 하나 랜덤하게 정하고,

이 노드의 유망한 자식노드 개수를 m1이라고 한다.

3. 위에서 정한 노드의 유망한 노드를 하나 랜덤하게 정하고, 이 노드

의 유망한 자식노드의 개수를 m2라고 한다.

4. …

5 더 이상 유망한 자식노드가 없을 때까지 이 과정을 반복한다5. 더 이상 유망한 자식노드가 없을 때까지 이 과정을 반복한다.

• mi = 수준 i에 있는 노드의 유망한 자식노드 개수의 평균의 추정치

t 수준 i에 있는 한 노드의 자식노드의 총 개수(유망하지 않은 노드도 포함)• ti = 수준 i에 있는 한 노드의 자식노드의 총 개수(유망하지 않은 노드도 포함)

• 되추적 알고리즘에 의해서 점검한 노드의 총 개수의 추정치는 다음과 같다.

Computer Algorithmsby Yang-Sae MoonPage 30

0 0 1 0 1 2 0 1 11 i it m t m m t m m m t

Page 31: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

BacktrackingMonte Carlo Technique Monte Carlo Technique –– nQueens (2/4)nQueens (2/4)

그런데… ti는 정해진 값이라 해도, mi는 어떻게 구하나?

실제 알고리즘을 수행하면서 카운트한다실제 알고리즘을 수행하면서 카운트한다.

과정을 간략히 기술하면 다음과 같다.

• 루트 수준에서 리프 수준까지 내려가면서 mi의 추정치를 구한다.

• 이를 위해, 각 수준에서 하나의 노드들 임의로 선택한다.

• 선택한 노드의 자식 노드들을 대상으로 유망 노드가 되는 비율을 구

하여 mi로 삼는다.i

• 상기 과정을 여러 번(경험적으로 20여 번 정도) 반복하여 mi값의 신

뢰도를 높인다뢰도를 높인다.

Computer Algorithmsby Yang-Sae MoonPage 31

Page 32: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

BacktrackingMonte Carlo Technique Monte Carlo Technique –– nQueensnQueens (3/4(3/4) ) -- skipskip

Generic Backtracking Algorithm의 효율 추정 알고리즘

int estimate(){

node v;int m mprod t numnodes; // mprod = 각 수준의 m0m1 mi 1int m, mprod, t, numnodes; // mprod = 각 수준의 m0m1...mi-1

// m = 각 수준의 유망 자식 노드 개수v = 상태공간트리의 루트;numnodes = 1;m = 1;mprod = 1;while(m != 0) {

t = v의 자식노드의 개수;t v의 자식노드의 개수;mprod = mprod * m;numnodes = numnodes + mprod * t;m = v의 유망한 자식노드의 개수;if(m != 0)

v = 무작위로 선택한 v의 자식노드;}return numnodes; // visit할 노드의 추정치

Computer Algorithmsby Yang-Sae MoonPage 32

return numnodes; // visit할 노드의 추정치}

Page 33: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

BacktrackingMonte Carlo Technique Monte Carlo Technique –– nQueensnQueens (4/4(4/4) ) -- skipskip

n-Queens Algorithm의 효율 추정 알고리즘int estimate_nqueens(int n){

index i, j, col[1..n];int m, mprod, t, numnodes;set_of_index prom_children;

i = 0;i = 0;numnodes = m = mprod = 1;while(m != 0 && i != n) {

mprod = mprod * m;numnodes = numnodes + mprod * t;pi++;m = prom_children = 0;for(j=1;j <= n;j++) {

col[i] = j;if(promising(i)) {if(promising(i)) {

m++;prom_children = prom_children {j};

}}}if(m != 0)

j = prom_children에서 무작위로 선택한 인덱스;col[i] = j;

}t d

Computer Algorithmsby Yang-Sae MoonPage 33

return numnodes;}

Page 34: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

강의강의 순서순서Backtracking

되추적 기술

n-Queens Problem

Monte Carlo Technique

Graph Coloring

Hamiltonian Circuits

Computer Algorithmsby Yang-Sae MoonPage 34

Page 35: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

BacktrackingGraph Coloring?Graph Coloring?

지도에 m가지 색으로 색칠하는 문제

개의 색을 가지고 인접한 지역이 같은 색이 되지 않도록 지도에• m개의 색을 가지고, 인접한 지역이 같은 색이 되지 않도록 지도에

색칠하는 문제

이 그래프에서 두 가지• 이 그래프에서 두 가지색으로 문제를 풀기는불가능하다.

• 세 가지 색을 사용하면총 여섯 개의 해답을얻을 수 있다얻을 수 있다.

Computer Algorithmsby Yang-Sae MoonPage 35

Page 36: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

Backtracking평면평면 그래프그래프 (Planar Graph)(Planar Graph)

평면 상에서 이음선(edge)들이 서로 엇갈리지 않게 그릴 수

있는 그래프있는 그래프.

지도에서 각 지역을 그래프의 노드로 하고, 한 지역이 어떤

다른 지역과 인접해 있으면 그 지역들을 나타내는 노드들 사

이에 이음선을 그으면, 모든 지도는 그에 상응하는 평면그래,

프로 표시할 수 있다. (다음 페이지 참조)

Computer Algorithmsby Yang-Sae MoonPage 36

Page 37: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

Backtracking지도와지도와 평면평면 그래프그래프

Computer Algorithmsby Yang-Sae MoonPage 37

Page 38: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

BacktrackingGraph Coloring Graph Coloring –– Backtracking Backtracking

3-Coloring

Computer Algorithmsby Yang-Sae MoonPage 38

Page 39: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

BacktrackingGraph Coloring Graph Coloring –– Algorithm (1/2) Algorithm (1/2)

A Backtracking Algorithm for the Graph Coloring Problem• 입력: n – 노드의 수, m – 색깔의 수, W[i][j] – 이음선 있으면 true, 그렇지 않으면 false

• 출력: vcolor[i] - i번째 노드에 할당된 색(1 ~ m)이다.

void m_coloring(index i)_{

index color;

if(promising(i))if(promising(i))if(i == n)

cout << vcolor[1] through vcolor[n];else

for(color=1;color <= m;color++) {vcolor[i+1] = color; // 다음 노드에 모든 색을 시도해 본다.m_coloring(i+1);

}}}

최상위 수준 호출: m coloring(0);

Computer Algorithmsby Yang-Sae MoonPage 39

최상위 수준 호출: m_coloring(0);

Page 40: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

BacktrackingGraph Coloring Graph Coloring –– Algorithm (2/2) Algorithm (2/2)

A Backtracking Algorithm for the Graph Coloring Problem (계속)

bool promising(index i){

index j = 1;index j 1;bool switch = true;while(j < i && switch) {

if(W[i][j] && vcolor[i] == vcolor[j])if(W[i][j] && vcolor[i] == vcolor[j])swicth = false;

j++;}}return switch;

}

모든 vertex에 대해 “인접하고, 색이 같은지”의 여부를 조사한다.

Computer Algorithmsby Yang-Sae MoonPage 40

Page 41: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

BacktrackingGraph Coloring Graph Coloring –– 분석분석

상태공간트리 상의 노드 수에 대한 상한은 다음과 같다.

12 11

1

mm mm m m

m

마찬가지로 Monte Carlo 기법을 사용하여 실제 수행시간을

1m

마찬가지로, Monte Carlo 기법을 사용하여, 실제 수행시간을

추정할 수 있다.

Computer Algorithmsby Yang-Sae MoonPage 41

Page 42: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

강의강의 순서순서Backtracking

되추적 기술

n-Queens Problem

Monte Carlo Technique

Graph Coloring

Hamiltonian Circuits

Computer Algorithmsby Yang-Sae MoonPage 42

Page 43: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

BacktrackingHamiltonian Circuits (1/2)Hamiltonian Circuits (1/2)

연결된 비방향성 그래프에서, 해밀토니안 회로(Hamiltonian

Circuits)/일주여행경로(tour)는 어떤 한 노드에서 출발하여Circuits)/일주여행경로(tour)는 어떤 한 노드에서 출발하여

그래프 상의 각 노드를 한번씩 만 경유하여 다시 출발한 노

드로 돌아오는 경로이다드로 돌아오는 경로이다.

Computer Algorithmsby Yang-Sae MoonPage 43

Page 44: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

BacktrackingHamiltonian Circuits (2/2)Hamiltonian Circuits (2/2)

해밀토니안 회로 문제: 연결된 비방향성 그래프에서 해밀토

니안 회로를 결정하는 문제니안 회로를 결정하는 문제

되추적 방법을 적용하기 위해서 다음 사항을 고려해야 한다.

• 경로 상의 i번째 노드는 그 경로 상의 (i - 1)번째 노드와 반드시 이웃

해야 한다.

• (n - 1)번째 노드는 반드시 0번째 노드(출발점)와 이웃해야 한다.

• i번째 노드는 그 앞에 오는 i - 1개의 노드가 될 수 없다.i번째 노드는 그 앞에 오는 i 1개의 노드가 될 수 없다.

Computer Algorithmsby Yang-Sae MoonPage 44

Page 45: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

BacktrackingHamiltonian Circuits Hamiltonian Circuits –– Algorithm (1/2)Algorithm (1/2)

A Backtracking Algorithm• 입력: n – 노드의 수, W[i][j] – 이음선 있으면 true, 그렇지 않으면 false

• 출력: vindex[i] – 경로상에서 i번째 노드의 인덱스

void hamiltonian(index i){

index j;

if(promising(i))if(promising(i))if(i == n-1)

cout << vindex[0] through vindex[n-1];else

for(j=2;j <= n;j++) { // 모든 노드의 다음 노드를vindex[i+1] = j; // 시도해 본다.hamiltonian(i+1); // j=2인 이유: 출발점은 제외

}}}

최상위 수준 호출: vindex[0] = 1;

Computer Algorithmsby Yang-Sae MoonPage 45

최상위 수준 호출: vindex[0] = 1;hamiltonian(0);

Page 46: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

BacktrackingHamiltonian Circuits Hamiltonian Circuits –– Algorithm (2/2)Algorithm (2/2)

A Backtracking Algorithm (계속)

bool promising(index i){

index j=1;bool switch = true;bool switch = true;

if(i == n-1 && !W[vindex[n-1]][vindex[0]])switch = false; // 첫번째 노드는 마지막 노드와 같아야 한다.

else if(i > 0 && !W[vindex[i-1]][vindex[i]])switch = false; // i번째 노드는

else { // (i-1)번째 노드와 인접해야 한다.while(j < i && switch) {while(j < i && switch) {

if(vindex[i] == vindex[j]) // 노드가 이미 선택되었는지swicth = false; // 검사한다.

j++;}

}return switch;

}

Computer Algorithmsby Yang-Sae MoonPage 46

}

Page 47: 알고리즘(Algorithm) Backtrackingg( (되추적ysmoon/courses/2011_1/alg/08.pdf · 상태공간트리의상태공간트리의이용이용 Backtracking 루트노드에서리프노드(leaf

BacktrackingHamiltonian Circuits Hamiltonian Circuits –– 분석분석

해밀토니안 회로 문제에서 상태공간트리 상의 노드 수(의 상

한)는 다음과 같다한)는 다음과 같다.

( 1 )2 ( 1 ) 11 ( 1 ) ( 1 ) ( 1 )n

n nn n n

마찬가지로 Monte Carlo 기법을 사용하여 실제 수행시간을

1 ( 1 ) ( 1 ) ( 1 )2

n n nn

마찬가지로, Monte Carlo 기법을 사용하여, 실제 수행시간을

추정할 수 있다.

Computer Algorithmsby Yang-Sae MoonPage 47