danuri
오늘의 기록
danuri
전체 방문자
오늘
어제
  • 오늘의 기록 (307)
    • java (150)
      • java (33)
      • spring (63)
      • jpa (36)
      • querydsl (7)
      • intelliJ (9)
    • kotlin (8)
    • python (24)
      • python (10)
      • data analysis (13)
      • crawling (1)
    • ddd (2)
    • chatgpt (2)
    • algorithm (33)
      • theory (9)
      • problems (23)
    • http (8)
    • git (8)
    • database (5)
    • aws (12)
    • devops (10)
      • docker (6)
      • cicd (4)
    • book (44)
      • clean code (9)
      • 도메인 주도 개발 시작하기 (10)
      • 자바 최적화 (11)
      • 마이크로서비스 패턴 (0)
      • 스프링으로 시작하는 리액티브 프로그래밍 (14)
    • tistory (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

태그

  • 트랜잭션
  • ChatGPT
  • docker
  • Jackson
  • Bitmask
  • 자바 최적화
  • nuribank
  • 도메인 주도 설계
  • SWAGGER
  • Security
  • Thymeleaf
  • reactive
  • connection
  • Kotlin
  • Java
  • Saving Plans
  • CICD
  • RDS
  • S3
  • POSTGIS
  • PostgreSQL
  • AWS
  • 마이크로서비스패턴
  • mockito
  • DDD
  • Database
  • Spring
  • JPA
  • 등가속도 운동
  • gitlab

최근 댓글

최근 글

hELLO · Designed By 정상우.
danuri

오늘의 기록

python/python

그래프

2021. 2. 9. 00:26

그래프

그래프는 노드(node)와 간선(edge)로 표현되며 이때 노드를 정점(vertex)이라고도 말한다. 또한 두 노드가 간선으로 연결되어 있다면 '두 노드는 인접하다(Adjacent)'라고 표현한다.

프로그래밍에서 그래프는 크게 2가지 방식으로 표현할 수 있다.

  • 인접 행렬(Adjacent Matrix)
  • 인접 리스트(Adjacent Lint)

인접 행렬

2차원 배열에 각 노드가 연결된 형태를 기록하는 방식이다. 파이썬에서는 리스트를 사용한다. 연결되어 있지 않은 노드끼리는 무한의 비용이라고 작성한다.

 

인접 행렬 방식 예제

INF=999999999 # 무한의 비용 선언

# 2차원 리스트를 이용해 인접 행렬 표현
graph=[
  [0,7,5],
  [7,0,INF],
  [5,INF,0]
]

 

인접 리스트

각 노드에 대해 인접한 노드를 차례대로 연결하여 저장한다. C++나 자바와 같은 프로그래밍 언어에서는 별도의 연결 리스트 기능을 위한 표준 라이브러리를 사용한다. 반면에 파이썬은 리스트 자료형이 append()와 여러 메서드를 제공하므로 역시 단순히 2차원 리스트를 사용해 인접 리스트를 구현할 수 있다.

 

인접 리스트 방식 예제

# 행이 3개인 2차원 리스트로 인접 리스트 표현
graph=[[] for _ in range(3)]

# 노드 0에 연결된 노드 정보 저장(노드, 거리)
graph[0].append((1,7))
graph[0].append((2,5))

# 노드 1에 연결된 노드 정보 저장
graph[1].append((0,7))

# 노드 2에 연결된 노드 정보 저장
graph[2].append((0,5))

 

두 방식은 어떤 차이가 있을까?

메모리 측면에서 보자면 인접 행렬 방식은 인접 리스트 방식에 비해 노드 개수가 많을수록 메모리가 불필요하게 낭비된다.

하지만 인접 리스트 방식은 인접 행렬 방식에 비해 특정한 두 노드가 연결되어 있는지에 대한 정보를 얻는 속도가 느리다.

 

'python > python' 카테고리의 다른 글

우선순위 큐  (0) 2021.02.09
이진 탐색 트리  (0) 2021.02.09
재귀함수  (0) 2021.02.09
스택 & 큐  (0) 2021.02.09
Python 문법  (0) 2021.01.02
    'python/python' 카테고리의 다른 글
    • 우선순위 큐
    • 이진 탐색 트리
    • 재귀함수
    • 스택 & 큐
    danuri
    danuri
    IT 관련 정보(컴퓨터 지식, 개발)를 꾸준히 기록하는 블로그입니다.

    티스토리툴바