24HuffmanCostInheritanceS17 iOS.key

Announcements
Homework 7 online (due Monday)
TA Applications due today
Lab 9 online today (implementation plan required)
Sam Blackshear '10, of Facebook, Friday, 2:30, TCL
202, "Moving Fast With Static Program Analysis."
Today’s Plan
Image Transformation for Compression
Computing Huffman Code Efficiency
Extends Explained
340 x 256 = 87,040
87,040 x 3 = 261,120
69,130 ≈ 25%
261,120
Original Pixel Values
160 160 176 192 192 192 192 224 224 224
144 160 160 176 192 192 192 208 224 224
96
96 112 128 144 192 192 176 208 224
112 96 128 112 112 144 176 176 208 224
112 128 208 176 96
80 128 160 160 208
192 192 208 192 176 128 112 144 144 192
Pixels Encoded in Binary
10100000 10100000 10110000 11000000 11000000 11000000 11000000 11100000 11100000 11100000
10010000 10100000 10100000 10110000 11000000 11000000 11000000 11010000 11100000 11100000
01100000 01100000 01110000 10000000 10010000 11000000 11000000 10110000 11010000 11100000
01110000 01100000 10000000 01110000 01110000 10010000 10110000 10110000 11010000 11100000
01110000 10000000 11010000 10110000 01100000 01010000 10000000 10100000 10100000 11010000
11000000 11000000 11010000 11000000 10110000 10000000 01110000 10010000 10010000 11000000
Paint by Number?
Paint by Letter?
160 160 176 192 192 192 192 224 224 224
F
F
G
H
H
H
H
J
J
J
144 160 160 176 192 192 192 208 224 224
E
F
F
G
H
H
H
I
J
J
96
96 112 128 144 192 192 176 208 224
B
B
C
D
E
H
H
G
I
J
112 96 128 112 112 144 176 176 208 224
C
B
D
C
C
E
G
G
I
J
112 128 208 176 96
80 128 160 160 208
C
D
I
G
B
A
D
F
F
I
192 192 208 192 176 128 112 144 144 192
H
H
I
H
G
D
C
E
E
H
Letter-to-number Correspondence + Occurrence Counts
80
96 112 128 144 160 176 192 208 224
A
B
C
D
E
F
G
H
I
J
1
4
6
5
5
6
7
13
6
7
Occurrence counts
A
B
C
D
E
F
G
H
I
J
1
4
6
5
5
6
7
13
6
7
Huffman Code
A 00110
B 00111
C 0000
D 0010
E 0001
F 110
G 010
H 10
I 111
J 011
Huffman Tree
H
G
J
F
C
E
D
A
B
I
80
96
112
128
144
160
176
192
208
224
00110
00111
0000
0010
0001
110
010
10
111
011
80
96 112 128 144 160 176 192 208 224
A
B
C
D
E
F
G
H
I
J
1
4
6
5
5
6
7
13
6
7
Original Pixel Values
160
160
176
192
192
192
192
224
224
224
144
160
160
176
192
192
192
208
224
224
96
96
112
128
144
192
192
176
208
224
112
96
128
112
112
144
176
176
208
224
112
128
208
176
96
80
128
160
160
208
192
192
208
192
176
128
112
144
144
192
80
96
112
128
144
160
176
192
208
224
00110
00111
0000
0010
0001
110
010
10
111
011
80
96 112 128 144 160 176 192 208 224
A
B
C
D
E
F
G
H
I
J
1
4
6
5
5
6
7
13
6
7
Pixels Represented using Huffman Code
110
110
010
10
10
10
10
011
011
011
0001
110
110
010
10
10
10
111
011
011
00111 00111 0000
0010
0001
10
10
010
111
011
0000 00111 0010
0000
0000
0001
010
010
111
011
0000
0010
111
010
00111 00110 0010
110
110
111
10
10
111
10
0001
0001
10
010
0010
0000
if
X- Y=D
then
D+ Y=X
if
X- Y=D
D+ Y=X
X- Y=D
D+ Y=X
-
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
B
C
D
E
F
A
H
I
J
K
L
G
N
O
P
Q
R
M
A-B B-C C-D D-E E-F F-A
G-H H-I I-J J-K K-L L-G
M-N N-O O-P P-Q Q-R R-M
A
+
G
M
-
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
B
C
D
E
F
A
H
I
J
K
L
G
N
O
P
Q
R
M
A-B B-C C-D D-E E-F
F
G-H H-I I-J J-K K-L
L
M-N N-O O-P P-Q Q-R
G
A
+
G
M
-
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
B
C
D
E
F
A
H
I
J
K
L
G
N
O
P
Q
R
M
A-B B-C C-D D-E
E
F
G-H H-I I-J J-K
K
L
M-N N-O O-P P-Q
Q
G
A
+
G
M
-
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
B
C
D
E
F
A
H
I
J
K
L
G
N
O
P
Q
R
M
A-B B-C C-D D
E
F
G-H H-I I-J
J
K
L
M-N N-O O-P
P
Q
G
A
+
G
M
1101100101110011101100101110011101101000
1111111111222222222233333333334
1234567890123456789012345678901234567890
going going gone
•
•
•
•
•
•
e = 000
_ = 001
o = 01
i = 100
n = 101
g = 11
0
0
e
0
1
1
0
o
1
_
0
i
1
g
1
n
Symbol
occurrences
n
o
i
g
e
space
3
3
2
5
1
2
Symbol
occurrences
n
o
i
g
e
space
3
3
2
5
1
2
Symbol
occurrences
n
o
i
g
e
space
3
3
2
5
1
2
Symbol
n
o
i
g
occurrences
3
3
2
5
1
0
e
_
3
Symbol
occurrences
n
o
i
g
e
space
3
3
2
5
1
2
Symbol
n
o
i
g
occurrences
3
3
2
5
1
0
e
_
3
Symbol
n
o
i
g
occurrences
3
3
2
5
0
1
e
_
3
Symbol
n
o
i
g
occurrences
3
3
2
5
Symbol
occurrences
0
1
i
n
5
o
g
3
5
0
1
e
_
3
0
1
e
_
3
0
Symbol
occurrences
Symbol
0
g
1
i
n
0
0
0
_
o
1
_
6
0
1
1
0
o
1
1
e
10
e
occurrences
0
1
i
16
0
1
g
1
n
1101100101110011101100101110011101101000
1111111111222222222233333333334
1234567890123456789012345678901234567890
going going gone
•
•
•
•
•
•
e = 000
_ = 001
o = 01
i = 100
n = 101
g = 11
0
0
e
0
1
1
0
o
1
0
_
1
g
1
i
n
Symbol
n
o
i
g
e
space
occurrences
3
3
2
5
1
2
1101100101110011101100101110011101101000
1111111111222222222233333333334
1234567890123456789012345678901234567890
going going gone
•
•
•
•
•
•
e = 000
_ = 001
o = 01
i = 100
n = 101
g = 11
0
0
e
0
1
1
0
o
1
0
_
1
g
1
i
n
Symbol
n
o
i
g
e
space
occurrences
3
3
2
5
1
2
1101100101110011101100101110011101101000
1111111111222222222233333333334
1234567890123456789012345678901234567890
going going gone
•
•
•
•
•
•
e = 000
_ = 001
o = 01
i = 100
n = 101
g = 11
0
0
e
0
1
1
0
o
1
0
_
1
g
1
i
n
Symbol
n
o
i
g
e
space
occurrences
3
3
2
5
1
2
1101100101110011101100101110011101101000
1111111111222222222233333333334
1234567890123456789012345678901234567890
going going gone
•
•
•
•
•
•
e = 000
_ = 001
o = 01
i = 100
n = 101
g = 11
0
0
e
0
1
1
0
o
1
0
_
1
g
1
i
n
Symbol
n
o
i
g
e
space
occurrences
3
3
2
5
1
2
16
0
1
6
10
0
3
0
0
3
_
1
1
5
o
1
e
0
1
1
i
2
g
5
n
3
2
3 + 5 + 6 + 10 + 16 = 40
Symbol
n
o
i
g
e
space
occurrences
3
3
2
5
1
2
Symbol
occurrences
n
o
i
g
e
space
3
3
2
5
1
2
Bits used = 0
Symbol
occurrences
n
o
i
g
e
space
3
3
2
5
1
2
Bits used = 0
Symbol
occurrences
n
o
i
g
e
space
3
3
2
5
1
2
Bits used = 0
Symbol
n
o
i
g
occurrences
3
3
2
5
0
1
_
e
3
Symbol
occurrences
n
o
i
g
e
space
3
3
2
5
1
2
Bits used = 0
Symbol
n
o
i
g
occurrences
3
3
2
5
0
1
_
e
3
Bits used = 3
Bits used = 0
Symbol
n
o
i
g
occurrences
3
3
2
5
0
1
_
e
3
Bits used = 3
Bits used = 0
Symbol
n
o
i
g
occurrences
3
3
2
5
0
1
_
e
3
Bits used = 3
Symbol
occurrences
0
1
i
n
5
o
g
3
5
0
1
_
e
3
Bits used = 0
Symbol
n
o
i
g
occurrences
3
3
2
5
0
1
_
e
3
Bits used = 3
Symbol
occurrences
0
1
i
n
5
o
g
3
5
0
1
_
e
3
Bits used = 3 + 5 = 8
Symbol
occurrences
0
1
i
n
5
o
g
3
5
0
1
_
e
3
Bits used = 3 + 5 = 8
Symbol
occurrences
1
0
i
n
5
o
g
3
5
0
1
_
e
3
Bits used = 3 + 5 = 8
Symbol
occurrences
0
1
0
i
n
5
0
1
o
1
e
g
_
6
5
Bits used = 3 + 5 + 6 = 14
Symbol
occurrences
0
1
0
i
n
5
0
1
o
1
e
g
_
6
5
Bits used = 3 + 5 + 6 = 14
Symbol
i
occurrences
0
1
0
n
0
1
o
1
e
g
_
5
6
5
Bits used = 3 + 5 + 6 = 14
0
Symbol
0
occurrences
0
1
1
i
g
n
10
0
1
o
1
_
e
6
Bits used = 3 + 5 + 6 + 10 = 24
0
Symbol
0
occurrences
0
1
1
0
g
i
n
1
_
e
10
o
1
6
Bits used = 3 + 5 + 6 + 10 = 24
Symbol
0
0
e
occurrences
0
1
1
0
o
1
_
i
16
0
1
g
1
n
Bits used = 3 + 5 + 6 + 10 + 16 = 40
1101100101110011101100101110011101101000
1111111111222222222233333333334
1234567890123456789012345678901234567890
going going gone
•
•
•
•
•
•
e = 000
_ = 001
o = 01
i = 100
n = 101
g = 11
0
0
e
0
1
1
0
o
1
_
0
i
1
g
1
n
occurrences
3
3
2
5
1
2
Bits used = 0
occurrences
3
3
2
5
1
2
Bits used = 0
occurrences
3
3
2
5
3
Bits used = 3
occurrences
3
3
2
5
3
Bits used = 3
occurrences
5
3
5
3
Bits used = 3 + 5 = 8
occurrences
5
3
5
3
Bits used = 3 + 5 = 8
occurrences
5
6
5
Bits used = 3 + 5 + 6 = 14
occurrences
5
6
5
Bits used = 3 + 5 + 6 = 14
occurrences
10
6
Bits used = 3 + 5 + 6 + 10 = 24
occurrences
10
6
Bits used = 3 + 5 + 6 + 10 = 24
occurrences
16
Bits used = 3 + 5 + 6 + 10 + 16 = 40
AN ARRAY?
occurrences =
3
3
2
5
1
2
ARRAYS DON’T SHRINK!!!
occurrences =
occurrences =
3
3
5
2
3
5
2
1
3
2
3
Bits used = 3
occurrences =
3
3
2
5
1
2
occurrences =
3
3
2
5
1
3
Bits used = 3
occurrences =
3
3
2
5
1
2
occurrences =
3
3
2
5
3
2
Symbols left = 5
Bits used = 3
Holey Cow!
occurrences =
3
3
2
5
3
1
occurrences =
5
3
2
5
3
1
Bits used = 3 + 5 = 8
AVOIDING HOLEY ARRAYS
occurrences =
3
3
Symbols left = 6
2
5
1
2
Bits used = 0
occurrences =
3
3
2
Symbols left = 6
occurrences =
3
3
Symbols left = 5
5
1
2
Bits used = 0
2
5
3
2
Bits used = 3
SWAP THE SMALLEST WITH THE LAST REMAINING
occurrences =
3
3
2
Symbols left = 5
occurrences =
3
3
Symbols left = 4
5
3
2
Bits used = 3
3
5
2
2
Bits used = 3
occurrences =
3
3
2
Symbols left = 5
occurrences =
3
3
Symbols left = 4
5
3
2
Bits used = 3
3
5
2
2
Bits used = 3
COMBINE 1 OF THE 2ND SMALLEST WITH SMALLEST
occurrences =
3
3
3
5
2
2
occurrences =
5
3
3
5
2
2
Symbols left = 4
Bits used = 3+5 = 8
occurrences =
3
3
3
5
2
2
occurrences =
5
3
3
5
2
2
Symbols left = 4
Bits used = 3+5 = 8
SWAP THE SMALLEST WITH THE LAST REMAINING
occurrences =
5
3
3
5
2
2
occurrences =
5
5
3
3
2
2
Symbols left = 3
Bits used = 8
occurrences =
5
3
3
5
2
2
occurrences =
5
5
3
3
2
2
Symbols left = 3
Bits used = 8
COMBINE 1 OF THE 2ND SMALLEST WITH SMALLEST
occurrences =
5
5
3
3
2
2
occurrences =
5
5
6
3
2
2
Symbols left = 3
Bits used = 8+6 = 14
occurrences =
5
5
3
3
2
2
occurrences =
5
5
6
3
2
2
Symbols left = 3
Bits used = 8+6 = 14
SWAP THE SMALLEST WITH THE LAST REMAINING
occurrences =
5
5
6
3
2
2
occurrences =
6
5
5
3
2
2
Symbols left = 2
Bits used = 14
occurrences =
5
5
6
3
2
2
occurrences =
6
5
5
3
2
2
Symbols left = 2
Bits used = 14
COMBINE 1 OF THE 2ND SMALLEST WITH SMALLEST
occurrences =
6
5
5
3
2
2
occurrences =
6
10
5
3
2
2
Symbols left = 2
Bits used = 14+10 = 24
occurrences =
6
5
5
3
2
2
occurrences =
6
10
5
3
2
2
Symbols left = 2
Bits used = 14+10 = 24
SWAP THE SMALLEST WITH THE LAST REMAINING
occurrences =
6
10
5
3
2
2
occurrences = 10
6
5
3
2
2
Symbols left = 1
Bits used = 24
COMBINE 1 OF THE 2ND SMALLEST WITH SMALLEST
occurrences = 10
6
5
3
2
2
occurrences = 16
6
5
3
2
2
Symbols left = 1
Bits used = 24+16 = 40