그래프

2022. 8. 31. 02:37·알고리즘(Algorithm)
728x90
반응형

그래프(Graphs)

그래프는 유한하고 변할 수 있는 꼭지점이나 노드나 점들의 집합으로 구성된 데이터 구조다

이 점들의 집합이 순서가 있는 경우는 유방향 그래프/ 없으면 무방향 그래프

노드 + 연결(connections) => 그래프

 

실생활 예시

- SNS

- 위치 / 지도

- 추천 시스템

 

용어

Vertex - 노드(정점)

Edge - 간선(노드사이 연결)

Weight / Unweighted - 간선에 값을 부여하면 가중 그래프 / 간선에 값이 없으면 비가중

https://ko.m.wikipedia.org/wiki/%ED%8C%8C%EC%9D%BC:Weighted_Graph.svg

Directed / Undirected -> Instagram에서 팔로우 여부에 따라 게시물을 볼 수 있는지 없는지 (방향)

Facebook에서는 모든 사람의 게시물을 볼 수 있음 (무방향)

\https://sites.google.com/a/cs.christuniversity.in/discrete-mathematics-lectures/graphs/directed-and-undirected-graph

 

인접 행렬(adjacency matrix)

http://www.btechsmartclass.com/data_structures/graph-representations.html

간선이 연결되어 있어 공유하는 부분은 1 아닌 부분은 0으로 표현

 

인접 리스트(adjacency list)

https://www.oreilly.com/library/view/c-data-structures/9781788833738/538c7cd0-0d98-49d9-8373-2c47583da90c.xhtml

 

BIG O

https://medium.com/@trejonstallsworth/graphs-in-javascript-831db916de10

 

인접 행렬 vs 인접 리스트

 

- 간선이 많지 않고 퍼져있는 그래프에서는 인접 리스트가 더 적은 공간을 차지한다.

(위 그래프의 Storage : 행렬은 하나의 노드가 추가되면 표 가로,세로에 노드가 각각 하나씩 추가되 새로운 라인을 만들어내기에 V^2)

- 모든 간선을 순회하는 것은 인접 리스트가 더 빠르다

- 특정 간선을 확인하는 것은 인접 행렬이 더 빠르다 (위 표에 Query 부분)

 

간단한 구현

class Graph{
    constructor(){
        this.adjacencyList = {};
    }
    addVertex(vertex){
        if(!this.adjacencyList[vertex]) this.adjacencyList[vertex] = [];
    }
    addEdge(v1,v2){
        this.adjacencyList[v1].push(v2);
        this.adjacencyList[v2].push(v1);
    }
    removeEdge(vertex1,vertex2){
        this.adjacencyList[vertex1] = this.adjacencyList[vertex1].filter(
            v => v !== vertex2
        );
        this.adjacencyList[vertex2] = this.adjacencyList[vertex2].filter(
            v => v !== vertex1
        );
    }
    removeVertex(vertex){
        while(this.adjacencyList[vertex].length){
            const adjacentVertex = this.adjacencyList[vertex].pop();
            this.removeEdge(vertex, adjacentVertex);
        }
        delete this.adjacencyList[vertex]
    }
}

let g = new Graph();
vertex 추가후 edge로 이어주면 된다

 

-> 그래프 순회로 이어짐

728x90
반응형
저작자표시 (새창열림)

'알고리즘(Algorithm)' 카테고리의 다른 글

unsigned int  (0) 2022.10.04
그래프 순회  (0) 2022.09.10
해시 테이블(HASH TABLES)  (0) 2022.08.30
힙 + 우선 순위 큐  (0) 2022.08.26
스택+큐  (0) 2022.08.23
'알고리즘(Algorithm)' 카테고리의 다른 글
  • unsigned int
  • 그래프 순회
  • 해시 테이블(HASH TABLES)
  • 힙 + 우선 순위 큐
Hun-bot
Hun-bot
IT를 중심으로 다양한 것
  • Hun-bot
    로봇이 만드는 눈사람
    Hun-bot
  • 전체
    오늘
    어제
    • All Article (128)
      • Programmers (6)
        • TIP (1)
        • SQL (2)
        • LV1 (1)
        • LV2 (2)
        • LV3 (0)
      • Baekjoon (31)
        • Bronze (10)
        • Silver (19)
        • Gold (2)
        • Platinum (0)
        • Diamond (0)
      • Leetcode (0)
        • Easy (0)
        • Medium (0)
        • Hard (0)
        • SQL (0)
      • 알고리즘(Algorithm) (42)
      • JavaScript (40)
      • Linux (7)
      • JSP (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      자바스크립트
      프로그래머스 #자바스크립트 #JS
      LeetCode #JS #Javascript #Algorithm
      JS #정규표현식
      Javascript
      Python #알고리즘
      JSP #Vscode #톰켓 #Tomcat #Java #Web #jdk
      BaekJoon
      리눅스 #입문
      Programmers
      JS #클래스
      프로그래머스
      JS #JavaScript #프로그래머스 #카카오
      async await #js #문법 #자바스크립트 #비동기
      JS #프로그래머스 #숫자의표현 #알고리즘
      리눅스
      알고리즘 #Algorithm
      고득점 Kit
      티스토리챌린지
      c++
      알고리즘
      오블완
      자바스크립트 #연습문제
      JavaScript #Set #Collection
      JS #JavaScript #프로그래머스 #알고리즘
      파이썬 #입력 #python #input
      Vue #Vue.js #정리
      SQL
      JS #javascript #객체 #Object
      Algorithm
    • 최근 댓글

    • hELLO· Designed By정상우.v4.10.3
    Hun-bot
    그래프
    상단으로

    티스토리툴바

    티스토리툴바