Anda di halaman 1dari 4

Tugas Mata Kuliah Algoritma dan Pemrograman (Binary Search Tree dan Trie)

Nama : Arrahman Adnani


NIM
: 23514052
1. Jelaskan perbedaan antara Binary Search Tree (BST) dan Trie!
- Sesuai namanya, pada BST, setiap node memiliki maksimal dua node children yakni node left
dan node right. Sedangkan pada Trie, jumlah node children di setiap node tidak dibatasi.
- Pada BST string atau kata disimpan dalam satu node. Sedangkan pada Trie, string atau kata
dipecah per huruf atau karakter dan masing-masing huruf disimpan dalam satu node.
- Pada BST, elemen pertama dimasukkan sebagai root. Sedangkan pada Trie, root diawali
dengan node yang bernilai kosong atau empty.
- Waktu pencarian kata pada BST relatif lebih lama dibandingkan Trie. Hal ini dikarenakan pada
BST proses pencarian dilakukan dengan membandingkan kata. Sedangkan pada Trie, proses
pencarian dilakukan per huruf dengan menggunakan huruf sebagai index pada setiap node.

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)

23514052 bst and trie.py


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102

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

#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#

deklarasi class binary search tree


inisialisasi suatu objek node binary search tree
masuk angka sebagai root
kosongkan node sebelah kiri
kosongkan node sebelah kanan
deklarasi fungsi untuk menyisipkan node dengan algoritma binary search tree
jika nilai yang disisipkan lebih kecil dari nilai root
jika node sebelah kiri sudah ada
panggil fungsi insert untuk menyisipkan angka ke dalam node sebelah kiri
jika belum ada
masukkan angka yang ingin disisipkan menjadi node sebelah kiri
jika nilai yang disisipkan lebih besar dari nilai root
jika node sebelah kanan sudah ada
panggil fungsi insert untuk menyisipkan angka ke dalam node sebelah kanan
jika belum ada
masukkan angka yang ingin disisipkan menjadi node sebelah kanan
jika nilai yang disisipkan sama dengan nilai root
jika node sebelah kanan sudah ada
tukar node yang sudah ada, dengan bantuan variabel sementara (temporary)
buat node baru
masukkan node temporary menjadi node sebelah kanan dari node yang baru
masukkan node yang baru menjadi node sebelah kanan
jika belum ada
masukkan angka yang disisipkan menjadi node sebelah kanan
deklarasi fungsi untuk mengunjungi node tree secara inorder
jika node sebelah kiri sudah ada
panggil fungsi inorder_traversal (rekursif) untuk menampilkan node sebelah kiri
tampilkan angka dari node
jika node sebelah kanan sudah ada
panggil fungsi inorder_traversal (rekursif) untuk menampilkan node sebelah kanan
deklarasi fungsi untuk mengunjungi node tree berdasarkan level node
tampilkan baris baru atau (\n)
buat suatu list
masukkan root ke dalam list
inisialisasi level nol yakni root
lakukan perulangan jika panjang elemen list lebih besar dari nol
buat list baru
tuliskan level
lakukan perulangan untuk setiap node di dalam list
tampilkan angka dari node
jika terdapat node di sebelah kiri
masukkan node sebelah kiri ke dalam list baru
jika terdapat node di sebelah kanan
masukkan node sebelah kanan ke dalam list baru
tambahkan level berikutnya
jadikan list baru sebagai syarat untuk perulangan

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-

Anda mungkin juga menyukai