14강 / 20강

그래프 — 관계를 그리는 방법

함께 산 상품 · 카테고리 · 배송 경로는 모두 같은 모양이다

그래프 — 관계를 그리는 방법
점(상품·고객·창고)과 선(함께 삼·배송로). 이 두 가지면 세상의 관계를 거의 다 표현할 수 있습니다.

쇼핑몰을 운영하다 보면 "연결"에 관한 질문을 계속 받게 됩니다.

  • 이 상품을 산 사람들이 같이 산 상품은?
  • 이 카테고리 아래에 어떤 카테고리들이 있지?
  • 서울 창고에서 제주까지 가장 싼 경로는?
  • 이 계정과 연결된 의심 계정들은?

이 모든 질문이 같은 자료 구조 위에서 풀립니다. 그래프(graph)예요.

그래프를 코드로 담는 두 가지 방법

① 인접 리스트 — 각 점마다 "내가 이어진 점들"의 목록. 실무에서 거의 항상 이걸 씁니다.

② 인접 행렬 — n×n 표에 이어졌으면 1, 아니면 0. 간단하지만 점이 3만 개면 9억 칸이 필요합니다.

같은 관계를 두 가지로 표현했습니다. 어느 쪽이 더 효율적일까요?
Python 브라우저에서 실행

🎮 관계망 편집기

점을 클릭해 선을 잇거나 끊어 보세요. 인접 리스트와 인접 행렬이 동시에 갱신됩니다. 점의 개수를 늘리면 행렬이 얼마나 빨리 커지는지도 보여 줍니다.

관계망 편집기 — 점을 클릭해 선을 잇고, 두 표현을 비교하세요
불러오는 중…

쇼핑몰의 그래프들

그래프정점간선쓰임새
함께 구매상품같은 주문에 담김 (가중치=횟수)추천 (15강)
카테고리카테고리상위→하위 (트리)메뉴 전개
배송망창고·집하지운송 가능 (가중치=비용)최저 비용 경로
계정 관계계정같은 카드·IP·주소 사용부정거래 탐지 (18강)
서비스 의존서버·서비스A가 B를 호출장애 영향 범위 파악
재귀로 트리를 훑는 기본형입니다. 15강에서 본격적으로 다룹니다.
Python 브라우저에서 실행
🤔 확인 문제
상품 30,000개의 '함께 구매' 관계를 인접 행렬로 저장하면 필요한 칸 수는?
🤔 확인 문제
카테고리 구조처럼 순환이 없고 부모가 하나인 그래프를 무엇이라 부를까요?
🤔 확인 문제
그래프를 훑을 때 방문한 곳을 기록해야 하는 이유는?