반응형
    
    
    
  Graph Traversal (그래프 순회)
- 대표적인 두 가지 방법
- DFS (Depth-First Search)
 - BFS (Breadth-First Search)
 
 - 동일한 Tree를 각각 DFS/BFS로 방문하기
- DFS : 깊이 먼저, 스택 (Stack) 자료구조 활용
 - BFS : 너비 먼저, 큐 (Queue) 자료구조 활용
 
 

깊이 우선 탐색 (Depth-First Search; DFS)
- (1) 정점 i를 방문한다.
 - (2) 정점 i에 인접한 정점 중에서 아직 방문하지 않은 정점이 있으면, 이 정점들을 모두 스택에 저장한다.
 - (3) 스택에서 정점을 삭제하여 새로운 i를 설정하고, 단계 (1)을 수행한다.
 - (4) 스택이 공백이 되면 연산을 종료한다.
 
DFS(s) {
    // s 는 시작 정점
    for (i←0; i<n; i ← i +1) do {
        visited[i] ← false; // 모든 정점을 방문하지 않은 것으로 마크
    }
    stack ← createStack(); // 방문할 정점을 저장하는 스택
    push(stack, s); // 시작 정점 s를 스택에 저장
    while (not isEmpty(stack)) do { // 스택이 공백이 될 때까지 반복 처리
        j ← pop(stack);
        if (visited[j] = false) then { // 정점 j를 아직 방문하지 않았다면
            visit j;                   // 직접 j를 방문하고
            visited[j] ← true;         // 방문 한 것으로 마크
            for (each k ∈ adjacency(j)) do {  // 정점 j에 인접한 정점 중에서
                if (visited[k] = false) then  // 아직 방문하지 않은 정점들을
                    push(stack, k);           // 스택에 저장
            } // end for
        } // end if
    } // end while
} end DFS()
너비 우선 탐색 (Breadth-First Search; BFS)
- (1) 정점 i를 방문한다.
 - (2) 정점 i에 인접한 정점 중에서 아직 방문하지 않은 정점이 있으면, 이 정점들을 모두 큐에 저장한다.
 - (3) 큐에서 정점을 삭제하여 새로운 i를 설정하고, 단계 (1)을 수행한다.
 - (4) 큐가 공백이 되면 연산을 종료한다.
 
BFS(s) {
    // s 는 시작 정점
    for (i←0; i<n; i ← i +1) do {
        visited[i] ← false; // 모든 정점을 방문하지 않은 것으로 마크
    }
    visited[s] ← true;
    queue ← creatQ(); // 방문할 정점을 저장하는 큐
    enqueue(queue, s); // 시작 정점 s를 큐에 저장
    while (not isEmpty(queue)) do { // 큐가 공백이 될 때까지 반복 처리
        j ← dequeue(queue);
        visit j; // 직접 j를 방문
        for (each k ∈ adjacency(j)) do {   // 정점 j에 인접한 정점 중에서
            if (visited[k] = false) then { // 아직 방문하지 않은 정점들을
                enqueue(queue, k);         // 큐에 저장
                visited[k] ← true;         // 방문 한 것으로 마크
            } // end if
        } // end for
    } // end while
} end BFS()반응형
    
    
    
  'Computer Science > Algorithm' 카테고리의 다른 글
| [알고리즘] 시간복잡도와 Master Theorem - 연습문제 (0) | 2023.09.23 | 
|---|---|
| [알고리즘] 시간복잡도와 Master Theorem (0) | 2023.09.23 | 
| [알고리즘] 허프만 인코딩 (Huffman encoding) - 파일 압축 알고리즘 (0) | 2022.06.14 | 
| [알고리즘] 공개 키 암호화 시스템 - RSA(Rivest-Shamir-Adleman) 암호화 알고리즘 (0) | 2022.06.14 | 
| [알고리즘] TSP (Traveling Salesperson Problem, 외판원 문제) (0) | 2022.06.14 |