1 / 26

Algoritma dan Struktur Data

Algoritma dan Struktur Data. Binary Search Tree. Konsep Dasar. Binary search tree (BST) merupakan binary tree dengan sifat berikut: Semua item pada left subtree bernilai kurang dari root. Semua item pada right subtree bernilai lebih atau sama dengan root. Setiap subtree merupakan BST.

helia
Télécharger la présentation

Algoritma dan Struktur Data

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. AlgoritmadanStruktur Data Binary Search Tree

  2. Konsep Dasar • Binary search tree (BST) merupakan binary tree dengan sifat berikut: • Semua item pada left subtree bernilai kurang dari root. • Semua item pada right subtree bernilai lebih atau sama dengan root. • Setiap subtree merupakan BST.

  3. Binary search tree

  4. Binary Search Tree 54 30 70 20 35 60 65 Karakteristik Binary Search Tree (BST) adalah Binary Tree yang terurut, denganketentuan : • semua LEFT CHILD haruslebihkecildari PARENT dan RIGHT CHILD. • semua RIGHT CHILD haruslebihbesardari PARENT dan LEFT CHILD. Target NODE : Node yang diinginkan/dicari Keuntungan : Searching/Pencarian Target Node menjadilebihefisiendancepat. Contoh :

  5. OPERASI • Traversals • Searches • Insertion • Deletion

  6. Operasi Semua operasi pd Binary Tree bisa diimplementasikan langsung pd BST,kecuali: • INSERT() • UPDATE() • DELETEKEY() Untuk ketiga operasi tsb perlu dilakukan modifikasi terhadap posisi node sehingga BST tetap terurut.

  7. Insert Langkah • Pencarian lokasi utk node yg akan diinsert (baru) selalu dimulai dr ROOT. • Jika node baru < ROOT,maka insert pd LEFT SUBTREE. • Jika node baru > ROOT,maka insert pd RIGHT SUBTREE. Contoh : Insert(54) Insert(70) Insert(60) 54 54 54 70 70 60

  8. Delete Jika yang dihapus adalah LEAF maka tidak perlu dilakukan modifikasi terhadap lokasi. Contoh : Delete(65) Sesudah didelete Sebelum didelete 54 54 30 70 30 70 20 35 60 20 35 60 65

  9. Delete(2) Jika yang dihapus adalah NODE yang hanya memiliki 1 child, maka child tersebut langsung menggantikan posisi dari parentnya.. Contoh : Delete(60) Sesudah didelete Sebelum didelete 54 54 30 70 30 70 20 35 65 20 35 60 65

  10. Delete (3) Jika yang dihapus adalah NODE dengan 2 children (2 SUBTREE), maka node yang diambil untuk menggantikan posisi node yang dihapus adalah : • berasal dari LEFT SUBTREE, yang diambil adalah node yang paling kanan (yang mempunyai nilai terbesar). • atau dari RIGHT SUBTREE, yang diambil adalah node yang paling kiri (yang mempunyai nilai terkecil). Contoh : Delete(54) Right SubTree Left SubTree Sebelum didelete 60 35 54 30 70 30 70 30 70 20 35 65 20 20 60 35 60 65 65

  11. Update Update terhadap suatu node akan mempengaruhi lokasi node tersebut setelah diupdate. Bila node tersebut setelah diupdate menimbulkan Tree yang bukan BST, maka harus diregenerate Tree tersebut. Pendekatan yang lebih sederhana untuk menyelesaikan operasi UPDATE adalah dengan penggabungan antara operasi DELETE dengan INSERT. Contoh : UPDATE node 70 dengan node 80 Sebelum UPDATE Sesudah INSERT Sesudah DELETE 54 54 54 30 70 30 65 30 65 20 20 80 35 60 20 35 65 35 65 65

  12. Representasi struct node { Key_Type Key; Elemen_Type Data; struct node *Left; struct node *Right; struct node *Parent; }; Parent Key Data Left Right Parent Parent Key Key Data Data Left Right Left Right NULL NULL NULL Parent Data Key Left Right NULL NULL

  13. Implementasi typedef struct nodeTag { struct nodeTag *left; struct nodeTag *right; struct nodeTag *parent; keyType key; ElmDataType ElmData; } nodeType; nodeType *root = NULL; #include <stdio.h> #include <stdlib.h> #define compLT(a,b) (a < b) #define compEQ(a,b) (a == b) typedef enum { STATUS_OK, STATUS_MEM_EXHAUSTED, STATUS_DUPLICATE_KEY, STATUS_KEY_NOT_FOUND } statusEnum; typedef int keyType; typedef int ElmDataType; Dikutip dari : http://ciips.ee.uwa.edu.au/~morris/Year2/PLDS210/niemann/s_man.htm

  14. Implementasi(2) statusEnum insert(keyType key, ElmDataType *ElmData) { nodeType *x, *current, *parent; /* find future parent */ current = root; parent = 0; while (current) { if (compEQ(key, current->key)) return STATUS_DUPLICATE_KEY; parent = current; current = compLT(key, current->key) ? current->left : current->right; } /* setup new node */ if ((x = malloc (sizeof(*x))) == 0) { return STATUS_MEM_EXHAUSTED; } x->parent = parent; x->left = NULL; x->right = NULL; x->key = key; x->ElmData = *ElmData; /* insert x in tree */ if(parent) if(compLT(x->key, parent->key)) parent->left = x; else parent->right = x; else root = x; return STATUS_OK; }

  15. 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

  16. Traversals • Bagaimana aturan tranversal yang menghasilkan urutan dari besar ke kecil? 52 44 35 23 20 18 12

  17. Searches • Beberapa jenis algoritma search: • Mencari node dengan nilai terkecil • Mencari node dengan nilai terbesar • Mencari node dengan nilai tertentu (BST search)

  18. Find the smallest node

  19. Find the smallest node

  20. Find the largest node right subtree not empty right subtree not empty right subtree empty return

  21. Insertion • BST insertion dilakukan pada leaf node

  22. BST Insertion

  23. Deletion • Untuk menghapus sebuah node dari BST, mula – mula lakukan search untuk mencari node yang akan dihapus. • Terdapat empat kasus pada penghapusan sebuah node di BST. Node yang dihapus : • Tidak memiliki child • Hanya punya right subtree. • Hanya punya left subtree • Punya dua subtree

  24. Four cases when we delete a node • Node tidak memiliki child • Hapus node • Node hanya memiliki right subtree. • Hapus node • Sambungkan right subtree ke parent node yang akan dihapus. • Node hanya memiliki left subtree. • Hapus node • Sambungkan left subtree ke parent node yang akan dihapus.

  25. Four cases when we delete a node • Node memiliki dua subtree. • Temukan node dengan nilai terbesar pada left subtree node yang dihapus kemudian pindahkan node tersebut untuk menggantikan node yang dihapus or • Temukan node dengan nilai terkecil pada right subtree node yang dihapus kemudian pindahkan node tersebut untuk menggantikan node yang dihapus.

  26. Selesai

More Related