440 likes | 603 Views
Algoritma dan Struktur Data. Linear & Binary Search Tree. Linear Search. struct { int key; int data; } table[100]; int n; int search(int key) { int i; i=0; while (i < n){ if(table[i].key==key) return(table[i].data); i++; } return -1; }. statement. (1). (2).
E N D
Algoritma dan Struktur Data Linear & Binary Search Tree
Linear Search struct { int key; int data; } table[100]; int n; int search(int key) { int i; i=0; while (i < n){ if(table[i].key==key) return(table[i].data); i++; } return -1; } statement (1) (2) (3) (4) (5) (6)
Cara kerja Linear Search key data 1 3 4 8 13 14 18 20 21 130 … 10 12 14 16 18 20 22 24 26 26 table0 1 2 3 4 5 6 7 8 99
Cara kerja Linear Search key data search(18) i=0 1 3 4 8 13 14 18 20 21 130 … 10 12 14 16 18 20 22 24 26 26 table0 1 2 3 4 5 6 7 8 99
Cara kerja Linear Search key data search(18) i=1 1 3 4 8 13 14 18 20 21 130 … 10 12 14 16 18 20 22 24 26 26 table0 1 2 3 4 5 6 7 8 99
Cara kerja Linear Search key data search(18) i=2 1 3 4 8 13 14 18 20 21 130 … 10 12 14 16 18 20 22 24 26 26 table0 1 2 3 4 5 6 7 8 99
Cara kerja Linear Search key data search(18) i=3 1 3 4 8 13 14 18 20 21 130 … 10 12 14 16 18 20 22 24 26 26 table0 1 2 3 4 5 6 7 8 99
Cara kerja Linear Search key data search(18) i=4 1 3 4 8 13 14 18 20 21 130 … 10 12 14 16 18 20 22 24 26 26 table0 1 2 3 4 5 6 7 8 99
Cara kerja Linear Search key data search(18) i=5 1 3 4 8 13 14 18 20 21 130 … 10 12 14 16 18 20 22 24 26 26 table0 1 2 3 4 5 6 7 8 99
Cara kerja Linear Search key data search(18) i=6 1 3 4 8 13 14 18 20 21 130 … 10 12 14 16 18 20 22 24 26 26 table0 1 2 3 4 5 6 7 8 99
Cara kerja Linear Search key data search(18) i=6 1 3 4 8 13 14 18 20 21 130 … 10 12 14 16 18 20 22 24 26 26 return(table[6].data) = 22
Binary Search int binary_search(int key) { int low, high, middle; low = 0; high = n-1; while (low <= high){ middle = (low+high) / 2; if (key == table[middle].key) return(table[middle].data) else if(key < table[middle].key) high = middle – 1; else low = middle + 1; } return -1; } (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11)
Cara kerja Binary Search key data binary_search(14) n=10 low=0 middle=4 high=9 1 3 4 8 13 14 18 20 21 25 10 12 14 16 18 20 22 24 26 26 table 0 1 2 3 4 5 6 7 8 9 Syarat Binary Search: Data harus sudah terurut (sorted)
Cara kerja Binary Search key data binary_search(14) n=10 low=5 high=9 1 3 4 8 13 14 18 20 21 25 10 12 14 16 18 20 22 24 26 26 table 0 1 2 3 4 5 6 7 8 9 Syarat Binary Search: Data harus sudah terurut (sorted)
Cara kerja Binary Search key data binary_search(14) n=10 low=5 middle=7 high=9 1 3 4 8 13 14 18 20 21 25 10 12 14 16 18 20 22 24 26 26 table 0 1 2 3 4 5 6 7 8 9 Syarat Binary Search: Data harus sudah terurut (sorted)
Cara kerja Binary Search key data binary_search(14) n=10 high low 1 3 4 8 13 14 18 20 21 25 10 12 14 16 18 20 22 24 26 26 table 0 1 2 3 4 5 6 7 8 9 Syarat Binary Search: Data harus sudah terurut (sorted)
Cara kerja Binary Search key data binary_search(14) n=10 high low middle 1 3 4 8 13 14 18 20 21 25 10 12 14 16 18 20 22 24 26 26 table 0 1 2 3 4 5 6 7 8 9 Syarat Binary Search: Data harus sudah terurut (sorted)
Cara kerja Binary Search key data binary_search(14) n=10 middle 1 3 4 8 13 14 18 20 21 25 10 12 14 16 18 20 22 24 26 26 table 0 1 2 3 4 5 6 7 8 9 return(table[5].data) = 20 Syarat Binary Search: Data harus sudah terurut (sorted)
Penambahan Data pada Linear Search Data yang ingin ditambahkan 17 31 1 3 4 8 13 14 18 20 21 25 10 12 14 16 18 20 22 24 26 26 Ditaruh di paling belakang 1 3 4 8 13 14 18 20 21 25 17 10 12 14 16 18 20 22 24 26 26 31
Penambahan Data pada Binary Search Data yang ingin ditambahkan 17 Mencari tempat menaruh data 31 1 3 4 8 13 14 18 20 21 25 10 12 14 16 18 20 22 24 26 26 1 3 4 8 13 14 18 20 21 25 10 12 14 16 18 20 22 24 26 26 Menggeser data dengan nilai lebih besar ke belakang
Penambahan Data pada Linear Search Data yang ingin ditambahkan 17 Mencari tempat menaruh data 31 1 3 4 8 13 14 18 20 21 25 10 12 14 16 18 20 22 24 26 26 1 3 4 8 13 14 18 20 21 25 17 10 12 14 16 18 20 22 24 26 26 31
Apakah Binary Search Tree itu ? • Pemakaian tree structure dalam proses pencarian (search) • Sifat Binary Tree: Pada sebuah node x, • elemen yang berada di LEFT sub-tree selalu lebih KECIL daripada x • elemen yang berada di RIGHT sub-tree selalu lebih BESAR Atau SAMA DENGAN daripada x • Binary Search Tree: proses pencarian (SEARCHING) berbasis binary tree
Operasi pada BST • Traversals • Searches • Insertion • Deletion
Traversals • Preorder traversal 23 18 12 20 44 35 52 • Postorder traversal 12 20 18 35 52 44 23 • Inorder traversal 12 18 20 23 35 44 52 Inorder traversal pada BST menghasilkan nilai yang terurut dari kecil ke besar
Proses Pencarian (contoh SUKSES) search(7) 7<13 7>5 7==7 Data yang dicari BERHASIL ditemukan 13→5 →7
Proses Pencarian (contoh GAGAL) search(8) 8<13 8>5 8>7 Data tidak ada Data yang dicari GAGAL ditemukan
Proses Pencarian 6 search(7) 5 21 2 15 6→21 →15→13 →7 13 7 8
Find the largest node right subtree not empty right subtree not empty right subtree empty return
Proses Penambahan (INSERTION) insert(8) 8<13 8>5 8>7 Data tidak ada Data yang dicari GAGAL ditemukan = disitulah data ditambahkan (insertion)
Tambahkan node: Penambahan Data pada Binary Search Tree 6 5 21 2 15 13 7 8
Penambahan Data pada Binary Search Tree 6 5 21 2 15 13 8 7 • (b) • Perhatikan: • (b) lebih bercabang/panjang daripada (a), akibatnya • proses pencarian pada (b) lebih lama daripada (a) 8
Penghapusan Data pada Binary Search Tree • Proses penghapusan data pada binary search tree lebih rumit daripada proses searching maupun proses insertion • Tahapan: • Carilah node yang akan dihapus • Apabila node tersebut leaf (tidak mempunyai anak), hapuslah node tersebut • Bila node tersebut memiliki 1 anak, setelah node dihapus, anaknya menggantikan posisi orangtuanya (node yang dihapus) 9 9 hapus “1” 5 5 1 7 7
Penghapusan Data pada Binary Search Tree 9 9 hapus “5” 14 5 14 3 3 1 4 1 4
Penghapusan Data pada Binary Search Tree • Proses penghapusan data pada binary search tree lebih rumit daripada proses searching maupun proses insertion • Tahapan: • Carilah node yang akan dihapus • Apabila node tersebut leaf (tidak mempunyai anak), hapuslah node tersebut • Bila node tersebut memiliki 1 anak, setelah node dihapus, anaknya menggantikan posisi orangtuanya (node yang dihapus) • Bila node tersebut memiliki 2 anak, setelah node dihapus, gantikan node tersebut dengan elemen terkecil dari right sub-tree ATAU elemen terbesar dari left sub-tree
Penghapusan Data pada Binary Search Tree 20 20 hapus “7” 23 23 7 10 29 29 4 4 18 18 2 5 2 5 10 15 15
node yang dihapus leaf (tidak mempunyai anak) Menghapus node dengan nilai terkecil 13 13 hapus “2” 20 5 20 5 2 7 7
node yang mempunyai 1 anak Menghapus node dengan nilai terkecil 13 13 hapus “5” 20 5 20 10 10 7 11 7 11