ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 그래프
    Data Structure & Algorithm 2022. 3. 27. 21:31

    정의

    정점과 정점 사이를 연결하는 간선으로 이루어진 비선형 자료구조


    특징

    • 정점 집합과 간선 집합으로 표현 가능
    • 정점은 Node, 간선은 Edge 라고도 함
    • 정점은 여러 개의 간선을 가질 수 있음
      <-> 선형 구조는 앞 뒤로 하나의 요소만 가질 수 있음
    • 방향 그래프와 무방향 그래프로 나눌 수 있음
    • 간선은 가중치를 가질 수 있음
    • 사이클이 발생할 수 있음
      탐색 시 무한 루프에 빠지지 않도록 하는 것에 주의
    • 인물 관계도로 비유 가능하며 지하철 노선도, 페이지랭크 등에 사용

    간선 방향성에 따른 분류

    무방향 그래프

    • 간선으로 이어진 정점끼리 양방향으로 이동 가능
    • (A, B) 와 (B, A) 는 같은 간선으로 취급 ex) 양방향 통행 도로

    방향 그래프

    • 간선에 방향성이 존재하는 그래프
    • <A, B> 와 <B, A> 간선을 통해 양방향으로 갈 수 있더라도
      두 간선은 다른 간선으로 취급됨 ex) 일방 통행

    전체 그래프의 연결 상태에 따른 분류

    연결 그래프

    • 모든 정점이 서로 이동 가능한 상태의 그래프

    비연결 그래프

    • 특정 정점쌍 사이에 간선이 존재하지 않는 그래프
    • ec) 친한 친구 설문 그래프... 🥲

    완전 그래프

    • 모든 정점끼리 연결된 상태의 그래프
    • 한 정점의 간선 수는 (전체 정점 수 - 1)
    • (전체 정점 수 - 1) X (전체 정점 수) = 전체 간선 

    사이클

    그래프의 정점과 간선의 부분 집합에서 순환이 발생하는 부분


    그래프 구현 방법

    • 인접 행렬 => 2차원 배열
    • 인접 리스트 => 연결 리스트

    Javascript 로 인접 행렬 표현

    const graph = Array.from(new Array(5), () => Array(5).fill(false));
    
    graph[0][1] = true;
    graph[0][3] = true;
    graph[1][2] = true;
    graph[2][0] = true;
    graph[2][4] = true;
    graph[3][2] = true;
    graph[4][0] = true;
    • 간선에 가중치가 필요하다면 true/false 가 아닌 null/임의 가중치 를 넣으면 됨
    • 무방향 그래프의 경우 모든 값을 대칭으로 넣어주면 됨

    Javascript 로 인접 리스트 표현

    const graph = Array.from(new Array(5), () => []);
    
    graph[0].push(1);
    graph[0].push(3);
    graph[1].push(2);
    graph[2].push(0);
    graph[2].push(4);
    graph[3].push(2);
    graph[4].push(0);

     

    • 정점 수 만큼 배열을 만든 후 연결할 정점을 배열에 추가하면 됨 

    'Data Structure & Algorithm' 카테고리의 다른 글

      (0) 2022.03.27
    트리  (0) 2022.03.27
    해시 테이블  (0) 2022.03.27
      (0) 2022.03.24
    스택  (0) 2022.03.23

    댓글

Designed by Tistory.