ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • BFS VS DFS
    카테고리 없음 2023. 3. 7. 23:30

    0. 그래프

    • 정점과 간선들의 유한집합 G=(V,E)
    • 정점(vertex): 여러 특성을 가지는 객체, 노드
    • 간선: 이 객체들의 연결 관계를 나타냄. 링크
    • 간선은 방향성이 있는 경우와 없는 경우가 있음.
    • 그래프를 구현하는 방법: 인접 행렬, 인접 리스

    1. BFS와 DFS란?

    • 대표적인 그래프 탐색 알고리즘
      • 너비 우선 탐색(Breadth First Searh) : 정점들과 같은 레벨에 있는 노드들(형제 노드들)을 먼저 탐색하는 방식
      • 깊이 우선 탐색(Depth First Search) : 정점의 자식들을 먼저 탐색하는 방식

     

    • BFS
      • 한 단계씩내려가면서 해당 노드와 같은 레벨에 있는 노드들(형제 노드들)을 먼저 순회함.
      • 동일한 노드를 먼저 탐색
    • DFS
      • 한 노드의 자식을 타고 끝까지 순회한 후, 다시 돌아와서 다른 형제들의 자식을 타고 내려가며 순회.
      • 하나의 노드의 최 하단부 노드까지 탐색한 후에 다른 노드를 탐색.

    DFS 알고리즘 구현

    • 자료구조 스택을 이용. 
      • needVisit 스택
    import java.util.ArrayList;
    
    ArrayList<String> aList = new ArrayLit<String>);
    aList.add("A");
    aList.add("B"); // 스택이니까 B가 먼저 나감
    Stirng node = aList.remove(aList.size()-1);  // pop
    System.out.println(aList);  // [A]
    System.out.println(node); // B
    
    
    public calss DFSSearch
    	public ArrayList<Stirng> dfsFunc(HashMap<Stirng, ArrayList<String>> graph, String startNode) { // 키와 키에 대응하는 값을 받고, 최초 노드는 설정해주기
        	ArrayList<Stirng> visited = new ArrayList<String>();
            ArrayList<Stirng> needVist = new ArrayList<String>();
            
            needVisit.add(startNode);
            
            while(needVisit.size()>0) {
            String node = needVisit.remove(needVisit.size()-1);  // 스택에서 맨 끝에서 데이터 POP
            if(!visited.contains(node)) {  // 방문한 적이 없다면
            visited.add(node);  // 해당 노드를 방문한 것으로 처리
            needVisit.addAll(graph.get(node));  // 해당 노드와 연결되어 있는 노드들을 needVisit으로 
            }
            }
            return visited;
            }
            }
    DFSSearch dObject = new DFSSearch();
    dObject.dfsFunc(graph, "A");  // 최초 노드 넣기

    [A,C,I,JH,G,B,D,F,E]

     

    https://daily-life-of-bsh.tistory.com/35

     

    깊이우선탐색 (Depth First Search)

    DFS는 자기가 방문했던 자취를 기억하는 스택의 특징을 이용하여 인적한 노드부터 차례대로 그래프를 순회하는 방법이다. 주어진 그래프에서 1부터 DFS를 한다고 예시를 들어보자. 여기에서는 더

    daily-life-of-bsh.tistory.com

     

    댓글

Designed by Tistory.