ν°μ€ν 리 λ·°
π νλ¦Ό μκ³ λ¦¬μ¦μ΄λ?
: κ°μ€μΉκ° μλ 무ν₯(λ°©ν₯X) κ·Έλνμ μ΅μ λΉμ© μ μ₯ νΈλ¦¬(MST)λ₯Ό μ°Ύλ μκ³ λ¦¬μ¦
νλ¦Ό μκ³ λ¦¬μ¦μ MST(μ΅μμ μ₯νΈλ¦¬, Minimum Spanning Tree)λ₯Ό ꡬννλ ν λ°©λ²μΌλ‘ λ€μ΅μ€νΈλΌ(Dijkstra) μκ³ λ¦¬μ¦κ³Ό μ μ¬νκ² λμνλ€.
Spanning Tree λ κ·Έλν μ€ λͺ¨λ μ μ μ΄ κ°μ μΌλ‘ μ°κ²°λμ΄ μμΌλ©΄μ μΈμ΄ν΄μ΄ μλ κ·Έλνλ₯Ό μλ―Ένλ€.
Prim μκ³ λ¦¬μ¦μ μμ μ μ μμλΆν° μΆλ°ν΄μ μ μ₯νΈλ¦¬ μ§ν©μ λ¨κ³μ μΌλ‘ νμ₯ν΄λκ°λ λ°©λ²μ΄λ€.
μ¦, κ°μ μ μ λ ¬νμ§ μκ³ νλμ μ μ μμ μμνμ¬ νΈλ¦¬λ₯Ό νμ₯ν΄ λκ°λ μκ³ λ¦¬μ¦μ΄λ€.
π‘ μκ³ λ¦¬μ¦
1. κ·Έλνμμ μμ μ μ μ μ ν
μμ λ¨κ³μμλ μμ μ μ λ§μ΄ MST μ§ν©μ ν¬ν¨λλ€.
2. μ νν μ μ μ λΆμλ λͺ¨λ κ°μ μ€ κ°μ€μΉκ° κ°μ₯ μμ κ°μ μ°κ²°νμ¬ νΈλ¦¬ νμ₯.
3. μ΄μ μ μ νν μ μ κ³Ό μλ‘ νμ₯λ μ μ μ λΆμλ λͺ¨λ κ°μ μ€ κ°μ€μΉκ° κ°μ₯ μμ κ°μ μ½μ
(μ΄λ, μ¬μ΄ν΄μ νμ±νλ μλ κ°μ₯ μμ κ°μ μ μ ν)
4. κ·Έλνμ n-1κ°μ κ°μ μ μ½μ ν λκΉμ§ 3.λ°λ³΅.
5. κ·Έλνμ κ°μ μ΄ n-1κ°κ° λλ©΄ μ΅μ λΉμ© μ μ₯ νΈλ¦¬(MST) μμ±.
κ° μ μ λ€μ μΈμ ν μ μ μ€ μ΅μ λΉμ©μΌλ‘ μ΄λκ°λ₯ν μ μ μ μ ννμ¬ μΆκ°νλ€.
μ°μ μμ νλ₯Ό μ΄μ©νμ¬ μμμ μ μ λΆν° μΈμ ν μ μ μ 거리λ₯Ό κΈ°μ€μΌλ‘ μ λ ¬νλ€.
μ΅μ 거리μ μ μ μ κΊΌλ΄μ λ€μ μΈμ ν μ μ μ λ£κ³ μ λ ¬νλ€.
μμ κ³Όμ μ λ°λ³΅νλ€.
π‘ μκ° λ³΅μ‘λ
- μ°μ μμ ν = O(E * log V)
- μΈμ νλ ¬ = O(V^2)
* V = μ μ μ μ, E = κ°μ (λ Έλ)μ μ
πJAVA μ½λ
public static class Edge implements Comparable<Edge>{
int v; // μ§μ
νλ μ μ
int w; // κ°μ€μΉ
Edge(int vertex, int weight) {
this.v = vertex;
this.w = weigth;
}
@Override
public int compareTo(Edge e) {
return this.w - e.w;
}
}
static Edge eList[] = new Edge[vNum+1];
public static int prim(int sV) {
PriorityQueue<Edge> pQ = new PriorityQueue<>();
pQ.add(new Edge(sV, 0)); // μμ μ μ μ μ₯
boolean visited[] = new boolean[vNum+1]; // ν΄λΉ μ μ μ κ°μ μΌλ‘ μ°κ²°ν΄μ€¬λμ§ νμΈ
Edge e;
int totW = 0;
while(!pQ.isEmpty()) {
e = pQ.remove(); // κ°μ
if(!visited[e.v]) { // λ°©λ¬Έ μ 무μ λ°λΌ κ·Έλνμ μ¬μ΄ν΄μ΄ μκΈ°λμ§κ° κ²°μ
visited[e.v] = true;
totW += e.w;
for(Edge next : eList[e.v])
if(!visited[next.v])
pQ.add(next); // λ°©λ¬Ένμ§ μμ ν΄λΉ μ μ μΌλ‘ λΆμλ κ°μ νμ μ μ₯
}
}
return totW; // MST κ°μ€μΉ ν©
}
'μκ³ λ¦¬μ¦' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μκ³ λ¦¬μ¦] λμ κ³νλ² (Dynamic Programming) (0) | 2022.03.31 |
---|---|
[μκ³ λ¦¬μ¦] ν¬λ£¨μ€μΉΌ(Kruskal), νλ¦Ό(Prim) μκ³ λ¦¬μ¦ (0) | 2022.03.31 |
- Total
- Today
- Yesterday