[Algorithm]

hyena_leeΒ·2023λ…„ 2μ›” 27일
0

Algorithm

λͺ©λ‘ 보기
48/53
post-thumbnail

πŸ¦• treeDFS

πŸ€ 문제 풀이

🌲 회고

날이 갈수둝 μ‹¬ν™”λ˜λŠ” μ•Œκ³ λ¦¬μ¦˜..턱없이 λΆ€μ‘±ν•œ μžλ£Œκ΅¬μ‘°λΆ„μ„μ‹€λ ₯ 및 λ°©λŒ€ν•œ μ–‘...μ™„μ „ 길을 μžƒμ–΄λ²„λ¦° λŠλ‚Œ..이거 λ‚œμ΄λ„ λ„ˆλ¬΄ μ‹¬ν•œκ±° μ•„λ‹Œκ°€μš”? κ·Έλž˜λ„ μ •κ·œμˆ˜μ—…μ— μžˆμœΌλ‹ˆ λ”°λΌκ°ˆ 수 밖에 μ—†λŠ” 상황인데 λΆ€λž΄λΆ€λž΄ ꡬ글링 ν•˜κ³  트리ꡬ쑰 λΆ€ν„° DFS ν›‘μ–΄λ³΄μ•˜μ§€λ§Œ λ„λŒ€μ²΄ 무슨 μ†Œλ¦¬ ν•˜λŠ” κ±΄κ°€μš”? ν•˜λŠ” λŠλ‚Œμ„ λ°›λŠ” 와쀑에..논문이 λ‚˜μ™”λ‹€λŠ” λ”°λˆν•œ μ†Œμ‹μ„ λ“£κ³  μ°Έκ³ ν•˜μ˜€λ‹€. 1달 정도 λ‚¨μ•˜λŠ”λ° μ•žμœΌλ‘œ 걱정이 νƒœμ‚°..μž˜ν•  수 μžˆμ„μ§€ 의문의 1패λ₯Ό 벌써 λ§žμ€ λŠλ‚Œμ΄λΌκ³ λ‚˜ ν• κΉŒ? 도망가면 λΆ™μž‘μœΌλ‘œ κ°ˆκΊΌλ‹€...가지말라고 ν•˜μ‹œλŠ” λΆ„λ“€ 보면 μ˜€λŠ˜λ„ λ‚˜λŠ” 묡묡히 λ‚΄ 갈길 κ±Έμ–΄κ°€λ³Έλ‹€...

🌳 μ•Œκ³  λ„˜μ–΄κ°€κΈ°

πŸŒ“ 트리(Tree)의 κ°œλ…

νŠΈλ¦¬λŠ” λ…Έλ“œλ‘œ 이루어진 자료 ꡬ쑰

1).νŠΈλ¦¬λŠ” ν•˜λ‚˜μ˜ 루트 λ…Έλ“œλ₯Ό κ°–λŠ”λ‹€.
2).루트 λ…Έλ“œλŠ” 0개 μ΄μƒμ˜ μžμ‹ λ…Έλ“œλ₯Ό κ°–κ³  μžˆλ‹€.
3). κ·Έ μžμ‹ λ…Έλ“œ λ˜ν•œ 0개 μ΄μƒμ˜ μžμ‹ λ…Έλ“œλ₯Ό κ°–κ³  있고, μ΄λŠ” 반볡적으둜 μ •μ˜λœλ‹€.

  • λ…Έλ“œ(node)λ“€κ³Ό λ…Έλ“œλ“€μ„ μ—°κ²°ν•˜λŠ” κ°„μ„ (edge)λ“€λ‘œ κ΅¬μ„±λ˜μ–΄ μžˆλ‹€.
    • νŠΈλ¦¬μ—λŠ” 사이클(cycle)이 μ‘΄μž¬ν•  수 μ—†λ‹€.
    • λ…Έλ“œλ“€μ€ νŠΉμ • μˆœμ„œλ‘œ λ‚˜μ—΄λ  μˆ˜λ„ 있고 그럴 수 없을 μˆ˜λ„ μžˆλ‹€.
    • 각 λ…Έλ“œλŠ” λΆ€λͺ¨ λ…Έλ“œλ‘œμ˜ 연결이 μžˆμ„ μˆ˜λ„ 있고 없을 μˆ˜λ„ μžˆλ‹€.
      - 각 λ…Έλ“œλŠ” μ–΄λ–€ μžλ£Œν˜•μœΌλ‘œλ„ ν‘œν˜„ κ°€λŠ₯ν•˜λ‹€.
class Node {
  public String name;
  public Node[] children;
}
  • λΉ„μ„ ν˜• 자료ꡬ쑰둜 계측적 관계λ₯Ό ν‘œν˜„ν•œλ‹€. Ex) 디렉터리 ꡬ쑰, 쑰직도
  1. κ·Έλž˜ν”„μ˜ ν•œ μ’…λ₯˜
  • 사이클(cycle)이 μ—†λŠ” ν•˜λ‚˜μ˜ μ—°κ²° κ·Έλž˜ν”„(Connected Graph)
  • λ˜λŠ” DAG(Directed Acyclic Graph, λ°©ν–₯성이 μžˆλŠ” λΉ„μˆœν™˜ κ·Έλž˜ν”„)의 ν•œ μ’…λ₯˜ 이닀.

🌱Tree와 κ΄€λ ¨λœ μš©μ–΄

  • 루트 λ…Έλ“œ(root node): λΆ€λͺ¨κ°€ μ—†λŠ” λ…Έλ“œ, νŠΈλ¦¬λŠ” ν•˜λ‚˜μ˜ 루트 λ…Έλ“œλ§Œμ„ 가진닀.
  • 단말 λ…Έλ“œ(leaf node): μžμ‹μ΄ μ—†λŠ” λ…Έλ“œ, β€˜λ§λ‹¨ λ…Έλ“œβ€™ λ˜λŠ” β€˜μžŽ λ…Έλ“œβ€™λΌκ³ λ„ λΆ€λ₯Έλ‹€.
  • λ‚΄λΆ€(internal) λ…Έλ“œ: 단말 λ…Έλ“œκ°€ μ•„λ‹Œ λ…Έλ“œ
  • κ°„μ„ (edge): λ…Έλ“œλ₯Ό μ—°κ²°ν•˜λŠ” μ„  (link, branch 라고도 뢀름)
  • ν˜•μ œ(sibling): 같은 λΆ€λͺ¨λ₯Ό κ°€μ§€λŠ” λ…Έλ“œ
  • λ…Έλ“œμ˜ 크기(size): μžμ‹ μ„ ν¬ν•¨ν•œ λͺ¨λ“  μžμ† λ…Έλ“œμ˜ 개수
  • λ…Έλ“œμ˜ 깊이(depth): λ£¨νŠΈμ—μ„œ μ–΄λ–€ λ…Έλ“œμ— λ„λ‹¬ν•˜κΈ° μœ„ν•΄ 거쳐야 ν•˜λŠ” κ°„μ„ μ˜ 수
  • λ…Έλ“œμ˜ 레벨(level): 트리의 νŠΉμ • 깊이λ₯Ό κ°€μ§€λŠ” λ…Έλ“œμ˜ 집합
  • λ…Έλ“œμ˜ 차수(degree): ν•˜μœ„ 트리 개수 / κ°„μ„  수 (degree) = 각 λ…Έλ“œκ°€ μ§€λ‹Œ κ°€μ§€μ˜ 수
  • 트리의 차수(degree of tree): 트리의 μ΅œλŒ€ 차수
  • 트리의 높이(height): 루트 λ…Έλ“œμ—μ„œ κ°€μž₯ κΉŠμˆ™νžˆ μžˆλŠ” λ…Έλ“œμ˜ 깊이

🌿트리(Tree)의 νŠΉμ§•

  • κ·Έλž˜ν”„μ˜ ν•œ μ’…λ₯˜μ΄λ‹€. β€˜μ΅œμ†Œ μ—°κ²° νŠΈλ¦¬β€™ 라고도 λΆˆλ¦°λ‹€.
  • νŠΈλ¦¬λŠ” 계측 λͺ¨λΈ 이닀.
  • νŠΈλ¦¬λŠ” DAG(Directed Acyclic Graphs, λ°©ν–₯성이 μžˆλŠ” λΉ„μˆœν™˜ κ·Έλž˜ν”„)의 ν•œ μ’…λ₯˜μ΄λ‹€.
    - loopλ‚˜ circuit이 μ—†λ‹€. λ‹Ήμ—°νžˆ self-loop도 μ—†λ‹€.
    - 즉, 사이클이 μ—†λ‹€.
  • λ…Έλ“œκ°€ N개인 νŠΈλ¦¬λŠ” 항상 N-1개의 κ°„μ„ (edge)을 가진닀.
    - 즉, 간선은 항상 (μ •μ μ˜ 개수 - 1) λ§ŒνΌμ„ 가진닀.
  • λ£¨νŠΈμ—μ„œ μ–΄λ–€ λ…Έλ“œλ‘œ κ°€λŠ” κ²½λ‘œλŠ” μœ μΌν•˜λ‹€.
    - μž„μ˜μ˜ 두 λ…Έλ“œ κ°„μ˜ κ²½λ‘œλ„ μœ μΌν•˜λ‹€. 즉, 두 개의 정점 사이에 λ°˜λ“œμ‹œ 1개의 κ²½λ‘œλ§Œμ„ 가진닀.
  • ν•œ 개의 루트 λ…Έλ“œλ§Œμ΄ μ‘΄μž¬ν•˜λ©° λͺ¨λ“  μžμ‹ λ…Έλ“œλŠ” ν•œ 개의 λΆ€λͺ¨ λ…Έλ“œλ§Œμ„ 가진닀.
    - λΆ€λͺ¨-μžμ‹ κ΄€κ³„μ΄λ―€λ‘œ 흐름은 top-bottom μ•„λ‹ˆλ©΄ bottom-top으둜 이루어진닀.
  • μˆœνšŒλŠ” Pre-order, In-order μ•„λ‹ˆλ©΄ Post-order둜 이루어진닀. 이 3가지 λͺ¨λ‘ DFS/BFS μ•ˆμ— μžˆλ‹€.
  • νŠΈλ¦¬λŠ” 이진 트리, 이진 탐색 트리, κ· ν˜• 트리(AVL 트리, red-black 트리), 이진 νž™(μ΅œλŒ€νž™, μ΅œμ†Œνž™) 등이 μžˆλ‹€.

☘️트리(Tree)의 μ’…λ₯˜

이진 트리(Binary Tree)

트리λ₯Ό κ΅¬μ„±ν•˜λŠ” λ…Έλ“œμ˜ branchκ°œμˆ˜λŠ” 0개, 1개, 2개, 3개, ... λ“± μ—¬λŸ¬ κ°œκ°€ 될수 μžˆμ§€λ§Œ, μ΄μ§„νŠΈλ¦¬λŠ” λ‹€λ₯΄λ‹€. μ΄μ§„νŠΈλ¦¬λŠ” λͺ¨λ“  λ…Έλ“œκ°€ μ΅œλŒ€ 2개의 μ„œλΈŒνŠΈλ¦¬λ₯΄ 가지고 μžˆλŠ” 트리고, μ„œλΈŒνŠΈλ¦¬ λ˜ν•œ λͺ¨λ‘ 이진 νŠΈλ¦¬μ΄λ‹€. 즉 branchκ°€ μ΅œλŒ€ 2개인 λ…Έλ“œλ§Œ κ΅¬μ„±λ˜λŠ” νŠΈλ¦¬λΌλŠ” λœ»μ΄λ‹€.
κ°„λ‹¨ν•˜κ²Œ μ •λ¦¬ν•˜μžλ©΄

  • λΆ€λͺ¨ λ…Έλ“œλ³΄λ‹€ μ™Όμͺ½ μžμ‹μ˜ λ…Έλ“œκ°€ μž‘λ‹€
  • λΆ€λͺ¨ λ…Έλ“œλ³΄λ‹€ 였λ₯Έμͺ½ μžμ‹μ˜ λ…Έλ“œκ°€ 크닀
  • 같은 데이터 값을 κ°€μ§€λŠ” λ…Έλ“œλŠ” μ—†λ‹€. (데이터 쀑볡 X)

πŸ€νŠΈλ¦¬(Tree)의 순회

트리 μˆœνšŒλž€, νŠΈλ¦¬μžλ£Œκ΅¬μ‘°μ— ν¬ν•¨λœ λ…Έλ“œλ“€μ„ νŠΉμ •ν•œ λ°©λ²•μœΌλ‘œ ν•œ λ²ˆμ”© λ°©λ¬Έν•˜λŠ” 방법이닀.
이λ₯Ό ν†΅ν•΄μ„œ 정보λ₯Ό μ‹œκ°μ μœΌλ‘œ 확인할 수 μžˆλ‹€. λ°”λ‘œ μœ„μ— μžˆλŠ” μ΄μ§„νŠΈλ¦¬μ˜ 이미지에 λ…Έλ“œλΆ€ν„° A,B,C둜 예둜 λ“€μ–΄λ³Έλ‹€λ©΄,

  • μ „μœ„ 순회(Pre-order traversal) : λ…Έλ“œ, μ™Όμͺ½μžμ‹ , 였λ₯Έμͺ½ μžμ‹  μˆœμ„œλ‘œ λ°©λ¬Έν•˜λŠ” 순회 방법 A -> B -> C
  • μ€‘μœ„ 순회(In-order traversal) : μ™Όμͺ½ μžμ‹, λ…Έλ“œ, 였λ₯Έμͺ½ μžμ‹ μˆœμ„œλ‘œ λ°©λ¬Έν•˜λŠ” 순회 방법 B -> A -> C
  • ν›„μœ„ 순회 (Post-order traverl) : μ™Όμͺ½ μžμ‹, 였λ₯Έμͺ½ μžμ‹, λ…Έλ“œ μˆœμ„œλ‘œ λ°©λ¬Έν•˜λŠ” 순회 방법 B -> C -> A

πŸ€νŠΈλ¦¬(Tree)의 κ΅¬ν˜„ 방법

기본적으둜 νŠΈλ¦¬λŠ” κ·Έλž˜ν”„μ˜ ν•œ μ’…λ₯˜μ΄λ―€λ‘œ κ·Έλž˜ν”„μ˜ κ΅¬ν˜„ 방법(인접 리슀트 λ˜λŠ” 인접 λ°°μ—΄)으둜 κ΅¬ν˜„ν•  수 μžˆλ‹€.

인접 λ°°μ—΄ 이용

  1. 1차원 배열에 μžμ‹ μ˜ λΆ€λͺ¨ λ…Έλ“œλ§Œ μ €μž₯ν•˜λŠ” 방법
    νŠΈλ¦¬λŠ” λΆ€λͺ¨ λ…Έλ“œλ₯Ό 0개 λ˜λŠ” 1개λ₯Ό 가지기 λ•Œλ¬Έ
    λΆ€λͺ¨ λ…Έλ“œλ₯Ό 0개: 루트 λ…Έλ“œ
  2. 이진 트리의 경우, 2차원 배열에 μžμ‹ λ…Έλ“œλ₯Ό μ €μž₯ν•˜λŠ” 방법
    이진 νŠΈλ¦¬λŠ” 각 λ…Έλ“œκ°€ μ΅œλŒ€ 두 개의 μžμ‹μ„ κ°–λŠ” 트리이기 λ•Œλ¬Έ
    Ex) A[i][0]: μ™Όμͺ½ μžμ‹ λ…Έλ“œ, A[i][1]: 였λ₯Έμͺ½ μžμ‹ λ…Έλ“œ

인접 리슀트 이용

  1. κ°€μ€‘μΉ˜κ°€ μ—†λŠ” 트리의 경우
    ArrayList< ArrayList > list = new ArrayList<>();
  2. κ°€μ€‘μΉ˜κ°€ μžˆλŠ” 트리의 경우
    1) class Node { int num, dist; // λ…Έλ“œ 번호, 거리 } μ •μ˜
    2) ArrayList[] list = new ArrayList[μ •μ μ˜ 수 + 1];

κ·Έλž˜ν”„(Graph)

  • κ·Έλž˜ν”„(graph)λž€ 사물을 정점(vertex)κ³Ό κ°„μ„ (edge)으둜 λ‚˜νƒ€λ‚΄κΈ° μœ„ν•œ 도ꡬ닀. β€’ κ·Έλž˜ν”„λŠ”λ‘κ°€μ§€λ°©μ‹μœΌλ‘œκ΅¬ν˜„ν• μˆ˜μžˆλ‹€.

κ·Έλž˜ν”„ 탐색
ν•˜λ‚˜μ˜ μ •μ μœΌλ‘œλΆ€ν„° μ‹œμž‘ν•˜μ—¬ μ°¨λ‘€λŒ€λ‘œ λͺ¨λ“  정점듀을 ν•œ λ²ˆμ”© λ°©λ¬Έν•˜λŠ” 것
Ex) νŠΉμ • λ„μ‹œμ—μ„œ λ‹€λ₯Έ λ„μ‹œλ‘œ 갈 수 μžˆλŠ”μ§€ μ—†λŠ”μ§€, μ „μž νšŒλ‘œμ—μ„œ νŠΉμ • λ‹¨μžμ™€ λ‹¨μžκ°€ μ„œλ‘œ μ—°κ²°λ˜μ–΄ μžˆλŠ”μ§€
https://gmlwjd9405.github.io/2018/08/14/algorithm-dfs.html

루트 λ…Έλ“œ ν˜Ήμ€ λ‹€λ₯Έ μž„μ˜μ˜ λ…Έλ“œμ—μ„œ μ‹œμž‘ν•΄μ„œ λ‹€μŒ λΆ„κΈ°(branch) 둜 λ„˜μ–΄κ°€κΈ° 전에 ν•΄λ‹Ή λΆ„κΈ°λ₯Ό μ™„λ²½ν•˜κ²Œ νƒμƒ‰ν•˜λŠ” 방법. 즉, λ„“κ²Œ νƒμƒ‰ν•˜κΈ° 전에 깊게 νƒμƒ‰ν•˜λŠ” 방법이닀.

  • 미둜λ₯Ό 탐색할 λ•Œ ν•œ λ°©ν–₯으둜 갈 수 μžˆμ„ λ•ŒκΉŒμ§€ 계속 κ°€λ‹€κ°€ 더 이상 갈 수 μ—†κ²Œ 되면 λ‹€μ‹œ κ°€μž₯ κ°€κΉŒμš΄ 갈림길둜 λŒμ•„μ™€μ„œ μ΄κ³³μœΌλ‘œλΆ€ν„° λ‹€λ₯Έ λ°©ν–₯으둜 λ‹€μ‹œ 탐색을 μ§„ν–‰ν•˜λŠ” 방법과 μœ μ‚¬ν•˜λ‹€.
  • 즉, λ„“κ²Œ(wide) νƒμƒ‰ν•˜κΈ° 전에 깊게(deep) νƒμƒ‰ν•˜λŠ” 것이닀.
  • μ‚¬μš©ν•˜λŠ” 경우: λͺ¨λ“  λ…Έλ“œλ₯Ό λ°©λ¬Έ ν•˜κ³ μž ν•˜λŠ” κ²½μš°μ— 이 방법을 μ„ νƒν•œλ‹€.
  • 깊이 μš°μ„  탐색(DFS)이 λ„ˆλΉ„ μš°μ„  탐색(BFS)보닀 μ’€ 더 κ°„λ‹¨ν•˜λ‹€.
  • λ‹¨μˆœ 검색 속도 μžμ²΄λŠ” λ„ˆλΉ„ μš°μ„  탐색(BFS)에 λΉ„ν•΄μ„œ λŠλ¦¬λ‹€.

🌱 깊이 μš°μ„  탐색(DFS)의 νŠΉμ§•

  • 자기 μžμ‹ μ„ ν˜ΈμΆœν•˜λŠ” μˆœν™˜ μ•Œκ³ λ¦¬μ¦˜μ˜ ν˜•νƒœ λ₯Ό 가지고 μžˆλ‹€.
  • μ „μœ„ 순회(Pre-Order Traversals)λ₯Ό ν¬ν•¨ν•œ λ‹€λ₯Έ ν˜•νƒœμ˜ 트리 μˆœνšŒλŠ” λͺ¨λ‘ DFS의 ν•œ μ’…λ₯˜μ΄λ‹€.
  • 이 μ•Œκ³ λ¦¬μ¦˜μ„ κ΅¬ν˜„ν•  λ•Œ κ°€μž₯ 큰 차이점은, κ·Έλž˜ν”„ νƒμƒ‰μ˜ 경우 μ–΄λ–€ λ…Έλ“œλ₯Ό λ°©λ¬Έν–ˆμ—ˆλŠ”μ§€ μ—¬λΆ€λ₯Ό λ°˜λ“œμ‹œ - 검사 ν•΄μ•Ό ν•œλ‹€λŠ” 것이닀.
    이λ₯Ό κ²€μ‚¬ν•˜μ§€ μ•Šμ„ 경우 λ¬΄ν•œλ£¨ν”„μ— 빠질 μœ„ν—˜μ΄ μžˆλ‹€.

🌱 깊이 μš°μ„  탐색(DFS)의 κ³Όμ •

1.a λ…Έλ“œ(μ‹œμž‘ λ…Έλ“œ)λ₯Ό λ°©λ¬Έν•œλ‹€.

  • λ°©λ¬Έν•œ λ…Έλ“œλŠ” λ°©λ¬Έν–ˆλ‹€κ³  ν‘œμ‹œν•œλ‹€.
  1. a와 μΈμ ‘ν•œ λ…Έλ“œλ“€μ„ μ°¨λ‘€λ‘œ μˆœνšŒν•œλ‹€.
  • a와 μΈμ ‘ν•œ λ…Έλ“œκ°€ μ—†λ‹€λ©΄ μ’…λ£Œν•œλ‹€.
  1. a와 μ΄μ›ƒν•œ λ…Έλ“œ bλ₯Ό λ°©λ¬Έν–ˆλ‹€λ©΄, a와 μΈμ ‘ν•œ 또 λ‹€λ₯Έ λ…Έλ“œλ₯Ό λ°©λ¬Έν•˜κΈ° 전에 b의 이웃 λ…Έλ“œλ“€μ„ μ „λΆ€ λ°©λ¬Έν•΄μ•Ό ν•œλ‹€.
  • bλ₯Ό μ‹œμž‘ μ •μ μœΌλ‘œ DFSλ₯Ό λ‹€μ‹œ μ‹œμž‘ν•˜μ—¬ b의 이웃 λ…Έλ“œλ“€μ„ λ°©λ¬Έν•œλ‹€.
  1. b의 λΆ„κΈ°λ₯Ό μ „λΆ€ μ™„λ²½ν•˜κ²Œ νƒμƒ‰ν–ˆλ‹€λ©΄ λ‹€μ‹œ a에 μΈμ ‘ν•œ 정점듀 μ€‘μ—μ„œ 아직 방문이 μ•ˆ 된 정점을 μ°ΎλŠ”λ‹€.
  • 즉, b의 λΆ„κΈ°λ₯Ό μ „λΆ€ μ™„λ²½ν•˜κ²Œ νƒμƒ‰ν•œ 뒀에야 a의 λ‹€λ₯Έ 이웃 λ…Έλ“œλ₯Ό λ°©λ¬Έν•  수 μžˆλ‹€λŠ” λœ»μ΄λ‹€.
  • 아직 방문이 μ•ˆ 된 정점이 μ—†μœΌλ©΄ μ’…λ£Œν•œλ‹€.
  • 있으면 λ‹€μ‹œ κ·Έ 정점을 μ‹œμž‘ μ •μ μœΌλ‘œ DFSλ₯Ό μ‹œμž‘ν•œλ‹€

🌱 깊이 μš°μ„  탐색(DFS)의 κ΅¬ν˜„

κ΅¬ν˜„ 방법 2가지
1. μˆœν™˜ 호좜 이용
2. λͺ…μ‹œμ μΈ μŠ€νƒ μ‚¬μš©
λͺ…μ‹œμ μΈ μŠ€νƒμ„ μ‚¬μš©ν•˜μ—¬ λ°©λ¬Έν•œ 정점듀을 μŠ€νƒμ— μ €μž₯ν•˜μ˜€λ‹€κ°€ λ‹€μ‹œ κΊΌλ‚΄μ–΄ μž‘μ—…ν•œλ‹€.
μˆœν™˜ ν˜ΈμΆœμ„ μ΄μš©ν•œ DFS μ˜μ‚¬μ½”λ“œ(pseudocode)

🌱 깊이 μš°μ„  탐색(DFS)의 μ‹œκ°„ λ³΅μž‘λ„

  1. DFSλŠ” κ·Έλž˜ν”„(μ •μ μ˜ 수: N, κ°„μ„ μ˜ 수: E)의 λͺ¨λ“  간선을 μ‘°νšŒν•œλ‹€.
  • 인접 리슀트둜 ν‘œν˜„λœ κ·Έλž˜ν”„: O(N+E)
  • 인접 ν–‰λ ¬λ‘œ ν‘œν˜„λœ κ·Έλž˜ν”„: O(N^2)
  1. 즉, κ·Έλž˜ν”„ 내에 적은 숫자의 κ°„μ„ λ§Œμ„ κ°€μ§€λŠ” ν¬μ†Œ κ·Έλž˜ν”„(Sparse Graph) 의 경우 인접 행렬보닀 인접 리슀트λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μœ λ¦¬ν•˜λ‹€.
profile
μ‹€μˆ˜λ₯Ό λ‘λ €μ›Œ 말고 계속 도전 ν•˜λŠ” 개발자의 μ—¬μ •!

0개의 λŒ“κΈ€