[자료구조] Graph: 개념, Vertices/Edges, 종류, 트리구조와 비교, 표현 (Adjacency Matrix vs Adjacency List)

2023. 12. 20. 17:00· Computer Science/Data Structure
목차
  1. 💋 Graph란?
  2. ✔️ 개념
  3. ✔️ 구성 요소
  4. 💋 Graph의 종류
  5. 💋 트리 구조 vs 그래프 구조
  6. 💋 Graph를 표현하는 방법
  7. ✔️ Adjacency Matrix
  8. ✔️ Adjacency List
  9. 💋 참고자료
반응형
반응형

 

 

Computer Science 모아보기 👉🏻 https://github.com/seoul-developer/CS

 

GitHub - seoul-developer/CS: 주니어 개발자를 위한 전공 지식 모음.zip

주니어 개발자를 위한 전공 지식 모음.zip. Contribute to seoul-developer/CS development by creating an account on GitHub.

github.com

 

💋 Graph란?

✔️ 개념

 

 

  • node(정점)과 edge(간선)으로 구성된 비선형 데이터 구조
    • node의 집합(V)과 edge의 집합(E)으로 이루어져 있다 ⇒ G(E, V)로 표기

 

 

✔️ 구성 요소

  • Vertices
    • nodes, 정점으로도 부른다.
    • 그래프의 기본 단위
    • 각 노드는 레이블이 지정될 수도 있고 되지 않을 수도 있습니다.
  • Edges
    • arcs, 간선으로도 부른다.
    • 두 노드를 연결하는 데 사용되는 선이나 링크
    • 어떤 방식으로든 그래프의 두 노드를 연결할 수 있으며, 규칙이 없다.
    • 각 간선은 레이블이 지정될 수도 있고 되지 않을 수도 있습니다.

 

💋 Graph의 종류

  • 무방향 그래프 (Undirected Graph) vs 방향 그래프 (Directed Graph 또는 Digraph)

 

 

  • 가중치 그래프 (Weighted Graph)
    • 간선에 가중치 또는 가중값이 할당된 그래프입니다. 가중치는 간선의 가중치를 나타내는 숫자입니다.
  • 무방향 가중치 그래프 (Undirected Weighted Graph)
    • 방향이 없는 그래프이면서, 간선에 가중치가 할당된 그래프
  • 방향 가중치 그래프 (Directed Weighted Graph)
    • 방향이 있는 그래프이면서, 간선에 가중치가 할당된 그래프
  • 사이클이 없는 그래프 (Acyclic Graph)
    • 그래프 내에 순환 구조가 없는 그래프
    • 예. 트리

 

  • 사이클이 있는 그래프 (Cyclic Graph) vs 사이클 그 자체인 그래프 (Cycle Graph)
    • Cyclic Graph는 그래프 내에 적어도 하나 이상의 순환 구조가 있는 그래프

 

 

  • 연결 그래프 (Connected Graph) vs 비연결 그래프 (Disconnected Graph)

 

 

  • 완전 그래프 (Complete Graph)
    • 모든 노드 간에 간선이 존재하는 그래프
    • 모든 노드가 서로 연결되어 있는 상태입니다.

 

💋 트리 구조 vs 그래프 구조

 

이전에 학습한 트리의 특징은 다음과 같았다.

  • 루트 노드는 딱 1개만 존재한다.
  • 트리 내에 사이클은 존재하지 않는다.
  • 자녀 노드는 하나의 부모 노드만 가진다.
  • 데이터를 순차적으로 저장하지 않는 비선형 구조
  • 트리에 서브 트리가 있는 재귀적 구조
  • 계층적 구조

 

트리구조랑 딱 비교해서 그래프 자료구조의 특징은 다음과 같다.

  • 그래프에서는 모든 노드가 동등하게 취급되며, 루트 노드의 개념이 없다.
  • 그래프 자료구조는 사이클이 존재할 수도 있다.
  • 사이클의 방향이 자유로워서, 부모 자녀 노드의 개념이 없다.
  • 데이터를 순차적으로 저장하지 않는 비선형 구조 ⇒ 트리와 동일
  • 그래프에 서브 그래프가 있는 재귀적 구조 ⇒ 트리와 유사함
  • 계층적 X

 

⇒ 그래프 자료구조를 일반화된 트리라고도 볼 수 있다.

 

Trees are the restricted types of graphs, just with some more rules. Every tree will always be a graph but not all graphs will be trees. Linked List, Trees, and Heaps all are special cases of graphs.  - geeksforgeeks

 

💋 Graph를 표현하는 방법

✔️ Adjacency Matrix

  • 그래프를 2차원 배열로 나타내는 방법
  • 연결되었으면 1, 연결되지 않았으면 0으로 나타낸다.

 

 

  • 가중치 그래프인 경우에는 각 원소가 가중치 값을 나타낼 수 있다.
  • 간선의 존재 여부를 상수 시간에 확인할 수 있지만, 간선의 수가 상대적으로 매우 적은 경우(희소한 그래프) 많은 메모리를 차지할 수 있다. ⇒ 그냥 의미없는 0으로 가득 채워진 배열…!

 

✔️ Adjacency List

  • 각 노드마다 인접한 노드들을 LinkedList로 나타내는 방법
    • 전체 노드의 2배에 해당하는 양의 데이터를 저장해야 한다. (연결은 서로 되는거니깐 2배임)

 

 

  • 가중치 그래프인 경우에는 가중치 값도 함께 저장될 수 있다.
  • 간선의 수가 상대적으로 매우 적은 경우(희소한 그래프)에도 메모리를 효율적으로 사용할 수 있다.
  • 간선의 존재 여부를 확인하려면 해당 노드의 연결 리스트를 순회해야 한다.

 

 

💋 참고자료

  • https://www.geeksforgeeks.org/introduction-to-graphs-data-structure-and-algorithm-tutorials/
  • https://www.geeksforgeeks.org/graph-data-structure-and-algorithms/
  • https://www.youtube.com/watch?v=fVcKN42YXXI

 

도움이 되었다면, 공감/댓글을 달아주면 깃짱에게 큰 힘이 됩니다!🌟
비밀댓글과 메일을 통해 오는 개인적인 질문은 받지 않고 있습니다. 꼭 공개댓글로 남겨주세요!

 

반응형

'Computer Science > Data Structure' 카테고리의 다른 글

[자료구조] B+Tree: 개념, 특징, B-Tree와의 차이점 정리  (2) 2023.12.21
[자료구조] Trie 자료구조로 문자열을 빠르게 탐색해 보자! (feat. 검색창 자동 완성)  (0) 2023.12.21
[자료구조] Set과 HashSet: 개념, List vs Set (메모리와 iteration 속도 관점에서)  (0) 2023.12.20
[자료구조] Map과 Hash Table: 해시 함수와 해시 충돌의 해결, 해시 테이블 리사이징  (3) 2023.12.19
[자료구조] B-Tree 자료구조가 DB 인덱스에 사용되는 이유: secondary storage 접근과 block 단위의 저장 공간 활용 관점에서  (0) 2023.12.19
  1. 💋 Graph란?
  2. ✔️ 개념
  3. ✔️ 구성 요소
  4. 💋 Graph의 종류
  5. 💋 트리 구조 vs 그래프 구조
  6. 💋 Graph를 표현하는 방법
  7. ✔️ Adjacency Matrix
  8. ✔️ Adjacency List
  9. 💋 참고자료
'Computer Science/Data Structure' 카테고리의 다른 글
  • [자료구조] B+Tree: 개념, 특징, B-Tree와의 차이점 정리
  • [자료구조] Trie 자료구조로 문자열을 빠르게 탐색해 보자! (feat. 검색창 자동 완성)
  • [자료구조] Set과 HashSet: 개념, List vs Set (메모리와 iteration 속도 관점에서)
  • [자료구조] Map과 Hash Table: 해시 함수와 해시 충돌의 해결, 해시 테이블 리사이징
깃짱
깃짱
연새데학교 컴퓨터과학과 & 우아한테크코스 5기 백엔드 스타라이토 깃짱
반응형
깃짱
깃짱코딩
깃짱
전체
오늘
어제
  • 분류 전체보기
    • About. 깃짱
    • Weekly Momentum
      • 2024
    • PROJECT
      • AIGOYA LABS
      • Stamp Crush
      • Sunny Braille
    • 우아한테크코스5기
    • 회고+후기
    • Computer Science
      • Operating System
      • Computer Architecture
      • Network
      • Data Structure
      • Database
      • Algorithm
      • Automata
      • Data Privacy
      • Graphics
      • ETC
    • WEB
      • HTTP
      • Application
    • C, C++
    • JAVA
    • Spring
      • JPA
      • MVC
    • AI
    • MySQL
    • PostgreSQL
    • DevOps
      • AWS
      • 대규모 시스템 설계
    • frontend
      • HTML+CSS
    • NextJS
    • TEST
    • Industrial Engineering
    • Soft Skill
    • TIL
      • 2023
      • 2024
    • Linux
    • Git
    • IntelliJ
    • ETC
      • 日本語

블로그 메뉴

  • 홈
  • 깃허브

인기 글

최근 글

태그

  • 우테코
  • 우아한테크코스
  • OOP
  • Java
  • Composition
  • 상속과조합
  • 스트림
  • 람다와스트림
  • lamda
  • TDD
  • 조합
  • 레벨로그
  • 우아한테크코스5기
  • 우테코5기
  • 람다
  • 예외
  • 상속
  • 컴포지션
  • 함수형프로그래밍
  • Stream
hELLO · Designed By 정상우.v4.2.0
깃짱
[자료구조] Graph: 개념, Vertices/Edges, 종류, 트리구조와 비교, 표현 (Adjacency Matrix vs Adjacency List)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.