MULTIM
EDIA
TUGAS 4
NAMA: LIS INDRIANI
NIM: 105841108020
KELAS: 5C
FAKULTAS TEKNIK
PROGRAM STUDI INFORMATIKA
UNIVERSITAS MUHAMMADIYAH MAKASSAR
TAHUN AJARAN 2022/2023
node terdiri dari simbol dan probabilitas variabel, child kiri/kanan, dan kode
variabel. Kode variabel terdiri 0 atau 1 tergantung pada sisi yang terpilih (kiri=0
class Node:
def __init__(self, prob, symbol, left=None, right=None):
# probability of symbol
self.prob = prob
# symbol
self.symbol = symbol
# left node
self.left = left
# right node
self.right = right
Penjelasan:
Pada source code di atas, membuat sebuah kelas dengan nama Node dan
menginisialisasi beberapa parameter yakni prob, symbol, left dan right. Inisialisasi
untuk nilai left dan right yaitu none karena arahnya belum ditentukan.
if(node.left):
Calculate_Codes(node.left, newVal)
if(node.right):
Calculate_Codes(node.right, newVal)
def Calculate_Probability(data):
symbols = dict()
for element in data:
if symbols.get(element) == None:
symbols[element] = 1
else:
symbols[element] += 1
return symbols
Penjelasan:
Pada fungsi Calculate_Codes, membuat dictionary dengan nama codes. Fungsi ini
akan menetapkan variabel yang menyimpan kode huffman untuk node saat ini dan
Dictionary adalah tipe data pada python yang berfungsi untuk menyimpan
kumpulan data/nilai dengan pendekatan “key-value”. Pada perulangan tersebut
perulangan for-loop melalui karakter dalam data dan fungsi append() untuk
Selain itu, juga membuat fungsi lain dengan nama TotalGain, yang menerima data
awal dan dictionary yang berasal dari CalculateCode, menyatukan simbol dan
kodenya. Fungsi ini akan membantu menghitung perbedaan antara ukuran bit data
Penjelasan:
Pada source code diatas, fungsi Total_Gain menghitung total ruang bit untuk
def Huffman_Encoding(data):
symbol_with_probs = Calculate_Probability(data)
symbols = symbol_with_probs.keys()
probabilities = symbol_with_probs.values()
print("symbols: ", symbols)
print("probabilities: ", probabilities)
nodes = []
# converting symbols and probabilities into huffman tree nodes
for symbol in symbols:
nodes.append(Node(symbol_with_probs.get(symbol), symbol))
while len(nodes) > 1:
# sort all the nodes in ascending order based on their
probability
nodes = sorted(nodes, key=lambda x: x.prob)
# for node in nodes:
# print(node.symbol, node.prob)
# pick 2 smallest nodes
right = nodes[0]
left = nodes[1]
left.code = 0
right.code = 1
# combine the 2 smallest nodes to create new node
newNode = Node(left.prob+right.prob,
left.symbol+right.symbol, left, right)
nodes.remove(left)
nodes.remove(right)
nodes.append(newNode)
huffman_encoding = Calculate_Codes(nodes[0])
print("symbols with codes", huffman_encoding)
Total_Gain(data, huffman_encoding)
encoded_output = Output_Encoded(data,huffman_encoding)
return encoded_output, nodes[0]
Penjelasan:
sebagai nodes dan mengubah simbol dan probabilitas menjadi node dari pohon
fungsi TotalGain, untuk menghitung perbedaan antara ruang bit data terkompresi
encodedOutput dan indeks nol dari array. Kemudian membuat sebuah fungsi
untuk mendekode data Huffman Encoded untuk mendapatkan kembali data awal
Penjelasan :
untuk menghasilkan output yang dikodekan. Terakhir membuat sebuah string dan
data = "AAAAAAABCCCCCCDDEEEEE"
print(data)
encoding, tree = Huffman_Encoding(data)
print("Encoded output", encoding)
print("Decoded Output", Huffman_Decoding(encoding,tree))
Penjelasan:
Pada Code diatas, membuat data string dan mencetaknya. Data ini akan
dan variabel tree. Kemudian mencetak hasil Encoded. Terakhir meneruskan data
didekodekan.
Berikut ouputnya: