greedy algorithm 2
greedy algorithm 2
Jianxi Gao
𝑊𝑒𝑖𝑔ℎ𝑡 𝑇 = 𝑤𝑒
𝑒∈𝐸′
Kruskal’s Algorithm example
1 2
A B C
3 2 1
2 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
1 2
A B C
3 2 1
2 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
1 2
A B C
3 2 1
2 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
1 2
A B C
3 2 1
2 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
1 2
A B C
3 2 1
2 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
1 2
A B C
3 2 1
2 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
1 2
A B C
3 2 1
2 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
1 2
A B C
3 2 1
2 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
1 2
A B C
3 2 1
2 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
1 2
A B C
3 2 1
2 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
1 2
A B C
3 2 1
2 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
1 2
A B C
3 2 1
2 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
1 2
A B C
3 2 1
2 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
1 2
A B C
3 2 1
2 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
1 2
A B C
3 2 1 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
1 2
A B C
3 2 1 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
1
A B C
3 2 1 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
1
A B C
3 2 1 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
1
A B C
3 2 1 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
1
A B C
2 1 1
1
D E F
G H
1
Kruskal’s algorithm
Procedure Kruskal(𝐺, 𝑤)
Input: A connected undirected graph G = (𝑉, 𝐸) with the edge
weights 𝑤𝑒
A B C 𝜋 𝐴 = 𝐴, rank (A)=0
1 2 𝜋 𝐵 = 𝐵, rank (B)=0
A B C
𝜋(𝐶) = 𝐶, rank (C)=0
3 2 1 𝜋 𝐷 = 𝐷, rank (D)=0
D E F 2 1
𝜋 𝐸 = 𝐸, rank (E)=0
1 4
D E F 𝜋 𝐹 = 𝐹, rank (F)=0
3 𝜋 𝐺 = 𝐺, rank (G)=0
G H 2 4 𝜋 𝐻 = 𝐻, rank (H)=0
2
for all vertex v ∈ 𝑉 G H
1
makeset(v)
Procedure makeset(𝑥)
𝜋 𝑥 = 𝑥 (parent pointer)
rank 𝑥 = 0
Kruskal’s Algorithm example
1 2
A B C
3 2 1
2 1
1 4
D E F
3
2 4
2
G H
1
𝑋 = {}.
Sort the edges of 𝐸 by weights.
A B C
1 2 find A ≠ 𝑓𝑖𝑛𝑑 𝐵
A B C
3 1
𝑋 = {(𝐴, 𝐵)}.
D E F 2 2 1
Union(A, B).
1 4
D E F
𝐴 = 𝑓𝑖𝑛𝑑 𝐴
3
G H 2 4 𝐵 = 𝑓𝑖𝑛𝑑 𝐵
2
G H If rank(𝐴) > 𝑟𝑎𝑛𝑘 𝐵
1
𝜋 𝐴 =𝐵
If rank(𝐴) = 𝑟𝑎𝑛𝑘 𝐵 :
𝑟𝑎𝑛𝑘 𝐵 = 𝑟𝑎𝑛𝑘 𝐵 +1=1
Kruskal’s Algorithm example
A B C
1 2 find A ≠ 𝑓𝑖𝑛𝑑 𝐵
A B C
3 1
𝑋 = {(𝐴, 𝐵)}.
D E F 2 2 1
Union(A, B).
1 4
D E F
𝐴 = 𝑓𝑖𝑛𝑑 𝐴
3
G H 2 4 𝐵 = 𝑓𝑖𝑛𝑑 𝐵
2
G H If rank(𝐴) > 𝑟𝑎𝑛𝑘 𝐵
1
𝜋 𝐴 =𝐵
If rank(𝐴) = 𝑟𝑎𝑛𝑘 𝐵 :
𝑟𝑎𝑛𝑘 𝐵 = 𝑟𝑎𝑛𝑘 𝐵 +1=1
Kruskal’s Algorithm example
1 2
A B C
3 2 1
2 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
A B C
1 2 find C ≠ 𝑓𝑖𝑛𝑑 𝐹
A B C
3 1
𝑋 = { 𝐴, 𝐵 , (𝐶, 𝐹)}.
D E F 2 2 1
Union(C, F).
1 4
D E F
𝐶 = 𝑓𝑖𝑛𝑑 𝐶
3
G H 2 4 𝐹 = 𝑓𝑖𝑛𝑑 𝐹
2
G H If rank(C) > 𝑟𝑎𝑛𝑘 𝐹
1
𝜋 𝐶 =𝐹
If rank(C) = 𝑟𝑎𝑛𝑘 𝐹 :
𝑟𝑎𝑛𝑘 𝐹 = 𝑟𝑎𝑛𝑘 𝐹 +1=1
Kruskal’s Algorithm example
A B C
1 2 find C ≠ 𝑓𝑖𝑛𝑑 𝐹
A B C
3 1
𝑋 = { 𝐴, 𝐵 , (𝐶, 𝐹)}.
D E F 2 2 1
Union(C, F).
1 4
D E F
𝐶 = 𝑓𝑖𝑛𝑑 𝐶
3
G H 2 4 𝐹 = 𝑓𝑖𝑛𝑑 𝐹
2
G H If rank(C) > 𝑟𝑎𝑛𝑘 𝐹
1
𝜋 𝐶 =𝐹
If rank(C) = 𝑟𝑎𝑛𝑘 𝐹 :
𝑟𝑎𝑛𝑘 𝐹 = 𝑟𝑎𝑛𝑘 𝐹 +1=1
Kruskal’s Algorithm example
1 2
A B C
3 2 1
2 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
A B C
1 2 find D ≠ 𝑓𝑖𝑛𝑑 𝐸
A B C
3 1
𝑋 = { 𝐴, 𝐵 , 𝐶, 𝐹 , (𝐷, 𝐸)}.
D E F 2 2 1
Union(D, E).
1 4
D E F D= 𝑓𝑖𝑛𝑑 𝐷
3
G H 2 4 E= 𝑓𝑖𝑛𝑑 𝐸
2
G H If rank(D) > 𝑟𝑎𝑛𝑘 𝐸
1
𝜋 𝐷 =𝐸
If rank(D) = 𝑟𝑎𝑛𝑘 𝐸 :
𝑟𝑎𝑛𝑘 𝐸 = 𝑟𝑎𝑛𝑘 𝐸 +1=1
Kruskal’s Algorithm example
A B C
1 2 find D ≠ 𝑓𝑖𝑛𝑑 𝐸
A B C
3 1
𝑋 = { 𝐴, 𝐵 , 𝐶, 𝐹 , (𝐷, 𝐸)}.
D E F 2 2 1
Union(D, E).
1 4
D E F D= 𝑓𝑖𝑛𝑑 𝐷
3
G H 2 4 E= 𝑓𝑖𝑛𝑑 𝐸
2
G H If rank(D) > 𝑟𝑎𝑛𝑘 𝐸
1
𝜋 𝐷 =𝐸
If rank(D) = 𝑟𝑎𝑛𝑘 𝐸 :
𝑟𝑎𝑛𝑘 𝐸 = 𝑟𝑎𝑛𝑘 𝐸 +1=1
Kruskal’s Algorithm example
1 2
A B C
3 2 1
2 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
1 2
A B C
3 2 1
2 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
1 2
A B C
3 2 1
2 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
1 2
A B C
3 2 1
2 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
A B C
1 2
A B C find A = 𝑓𝑖𝑛𝑑 𝐷 = 𝐸
3 2 1
D E F 1
1 4
D E F
3
G H 2 4
2
G H
1
Kruskal’s Algorithm example
1 2
A B C
3 2 1 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
A B C
1
A B C find B = 𝑓𝑖𝑛𝑑 𝐶 = 𝐸
3 2 1
D E F 1
1 4
D E F
3
G H 2 4
2
G H
1
Kruskal’s Algorithm example
1
A B C
3 2 1 1
1 4
D E F
3
2 4
2
G H
1
Kruskal’s Algorithm example
1
A B C
2 1 1 F D H B
1
D E F
2
C G
G H A
1
Q: What if we do not Rank and just randomly union the nodes, correctness and efficiency?
G
Huffman
encoding
Huffman encoding
2 4 8 10 16
E D B C A
Huffman encoding
2 4 8 10 16
E D B C A
Huffman encoding
14
2 4 8 10 16
E D B C A
Huffman encoding
24
10 14
C
6
2 4 8 16
E D B A
Huffman encoding
40
16 24
A
10 14
C
6
2 4 8
E D B
Huffman encoding
2 4 8
E D B
Huffman encoding
2 4
E D
Huffman encoding -- example
6 8 10 16
B C A
2 4
E D
Huffman encoding -- example
6 8 10 16
B C A
2 4
E D
Huffman encoding -- example
10 16
C A
Huffman encoding -- example
14 10 16
C A
6 8
B
2 4
E D
10 14 16
C A
6 8
B
2 4
E D
Huffman encoding -- example
14 10 16
C A
6 8
B
2 4
E D
Huffman encoding -- example
24 16
A
14 10
C 24 16
A
6 8
B 10 14
C
2 4
E D
6 8
B
2 4
E D
Huffman encoding -- example
40 40
24 16 16 24
A A
14 10 10 14
C C
6 8 6 8
B B
2 4 2 4
E D E D
Huffman encoding -- example
40 40
0 1 0 1
24 16 16 24
0 A A 0
1 1
14 10 10 14
C C
0 0 1
1
6 8 6 8
0 1 B 0 B
1
2 4 2 4
E D E D
Huffman encoding -- example
40
0 1
24 16
0 A
1
14 10
0 C Character Frequency Code 1
1
A 16 1
6 8 B 8 001
0 1 B
C 10 01
2 4 D 4 0001
E D
E 2 0000
Huffman encoding -- example
15 mins
Huffman encoding -- example
letter Frequency Code
2 3 4 4 7 A 4
D C A E B
B 7
C 3
D 2
E 4
Huffman encoding -- example
letter Frequency Code
2 3 4 4 7 A 4
D C A E B
B 7
C 3
D 2
E 4
Huffman encoding -- example
letter Frequency Code
20
A 4 00
0 1
B 7 11
8 12 C 3 101
0 1 0 1
D 2 100
4 4 5 7 E 4 01
A E 0 1 B
2 3
D C
Table size = 5*8 + 2+2+3+3+2 = 52
Any prefix-free encoding can be represented by a full binary tree– that is, a binary tree in
which every node has either zero or two children – where the symbols are at the leaves, and
where each codeword is generated by a path from root to leaf, interpreting left as 0 and right as
1.