BST and Trie (Python)
BST and Trie (Python)
2. Gambarkan perbedaan BST dan Trie jika data berupa string/kata (10 kata, pilihan bebas)!
Misalkan sederet nama sebagai berikut:
"BULAN", "RANTI", "RANGGA","RAJA", "RIANTI", "BUDIARTI", "RIA", "BUDI", "BUNGA", "BUDIMAN"
Binary Search Tree
Level 0 (Root):
BULAN
Level 1:
Level 2:
BUDIARTI
BUDI
RANTI
BUDIMAN
RANGGA
Level 3:
RIANTI
RIA
RAJA
Level 4:
BUNGA
Trie
Level 0 (Root):
Level 1:
Level 2:
I
A
Level 3:
Level 4:
Level 5:
U
N
Level 7:
Level 8:
Level 6:
3. Buat implementasi BST dan Trie menggunakan Python dengan data berupa strings (10 kata)
seperti pada soal no. 2!
Berikut tampilan program saat dijalankan (source code terlampir)
class BS_Tree:
def __init__ (self, value):
self.value = value
self.left = None
self.right = None
def insert(self, value):
if value < self.value:
if self.left:
self.left.insert(value)
else:
self.left = BS_Tree(value)
elif value > self.value:
if(self.right):
self.right.insert(value)
else:
self.right = BS_Tree(value)
else:
if self.right:
temp = self.right
bst = BS_Tree(value)
bst.right = temp
self.right = bst
else:
self.right = BS_Tree(value)
def inorder_traversal(self):
if self.left:
self.left.inorder_traversal()
print self.value,
if self.right:
self.right.inorder_traversal()
def levelorder_traversal(self):
print "\n",
list = []
list.append(self)
level = 0
while len(list) > 0:
newlist = []
print "\nNode Level",level,"=",
for e in list:
print e.value,
if e.left:
newlist.append(e.left)
if e.right:
newlist.append(e.right)
level+=1
list = newlist
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
class re_Trie_val:
# deklarasi class binary search tree
def __init__(self, value):
# inisialisasi suatu objek node trie
self.value = value
# masukkan value
self.children = {}
# deklarasi children sebagai suatu dict
self.isEOW = False
# deklarasi apakah node sebagai End Of Word (EOW)
self.word = None
# deklarasi word untuk menyimpan kata pada node
def insert(self, value):
# deklarasi fungsi insert
word = ""
# deklarasi word kosong (empty string)
for char in value:
# untuk setiap huruf dalam value yang ingin diinsert
if char not in self.children:
# jika node huruf tersebut sudah ada pada children
self.children[char] = re_Trie_val(char) # maka buat node baru dengan value huruf tersebut dan masukkan ke children
# dengan indeks (dict) pada children adalah huruf tersebut
self = self.children[char]
# ganti node parent dengan children
word = word + char
# tambahkan word dengan huruf yang sedang dalam iterasi
self.word = word
# masukkan word ke dalam variabel word pada node
self.isEOW = True
# masukkan penanda EOW (End Of Word)
def print_word (self):
# deklarasi fungsi print_word
if len(self.children):
# jika memiliki children
for char in self.children:
# maka untuk setiap node children
if self.children[char].isEOW:
# jika node adalah EOW (End Of Word)
print self.children[char].word, # tampilkan kata
self.children[char].print_word()
# panggil fungsi print_word (rekursif) untuk setiap node children
def levelorder (self):
# deklarasi fungsi untuk mengunjungi node tree berdasarkan level node
print "\n",
# tampilkan baris baru atau (\n)
list = []
# buat suatu list
list.append(self)
# masukkan root ke dalam list
level = 0
# inisialisasi level nol yakni root
while len(list) > 0:
# lakukan perulangan jika panjang elemen list lebih besar dari nol
newlist = []
# buat list baru
print "\nNode Level",level,"=",
# tuliskan level
for e in list:
# lakukan perulangan untuk setiap node di dalam list
print e.value,
# tampilkan huruf (value) dari node
if e.children:
# jika terdapat node children
for char in e.children:
# lakukan perulangan untuk setiap children
newlist.append(e.children[char])
# masukkan node children ke dalam list baru
level+=1
# tambahkan level berikutnya
list = newlist
# jadikan list baru sebagai syarat untuk perulangan
nama = ["BULAN", "RANTI", "RANGGA","RAJA", "RIANTI",
# deklarasi array nama
"BUDIARTI", "RIA", "BUDI", "BUNGA", "BUDIMAN"]
# terdiri dari 10 elemen
BST = BS_Tree(nama[0])
# buat binary search tree menggunakan elemen pertama dari array nama sebagai root
Trie = re_Trie_val(None)
# buat trie dengan nilai kosong sebagai root
Trie.insert(nama[0])
# insert elemen pertama dari array nama ke dalam trie
print "Nama =",nama[0],
# tuliskan elemen pertama dari array nama
for i in range(1,len(nama)):
# untuk nama selanjutnya
BST.insert(nama[i])
# insert kedalam binary search tree
Trie.insert(nama[i])
# insert trie
print nama[i],
# tampilkan elemen nama lainnya
print "\n\nBST =",
# tampilkan baris baru atau (\n)
BST.inorder_traversal()
# tampilkan elemen binary search tree dengan memanggil fungsi inorder_traversal
BST.levelorder_traversal()
# tampilkan elemen binary search tree dengan memanggil fungsi levelorder_traversal
print "\n\nTrie =",
# tampilkan baris baru atau (\n)
Trie.print_word()
# tampilkan kata pada trie
Trie.levelorder()
# tampilkan elemen node trie berdasarkan level node
-1-