Senin, 21 Oktober 2013

Leaf sebuah node yang tidak memiliki children. Leaf biasa disebut sebagai external node, sedangkan node selainnya disebut sebagai internal node
Leaf merupakan semua simpul yang berada pada tingkat terendah dari pohon dinamakan daun (leaf node). Sejak mereka terletak pada tingkat paling bawah, mereka tidak memiliki anak satupun. Seringkali, daun merupakan simpul terjauh dari akar. Dalam teori grafik, sebuah daun adalah sebuah sudut dengan tingkat 1 selain akar (kecuali jika pohonnya hanya memiliki satu sudut; maka akarnya adalah daunnya juga). Setiap pohon memiliki setidaknya satu daun.

Dalam pohon berdasarkan genetic programming sebuah daun (juga dibilang terminal) adalah bagian terluar dari sebuah program pohon. Jika dibandingkan dengan fungsinya atau simpul dalam, daun tidak memiliki argumen. Di banyak kasus dalam daun-GP input ke programnya.

Dimulai dari node root,  menggunakan tes terhadap atribut dari record yang belum ada kelasnya ini lalu mengikuti cabang yang sesuai dengan hasil dari tes tersebut, yang akan membawa kepada internal node (node yang memiliki satu cabang masuk dan dua atau lebih cabang yang keluar), dengan cara harus melakukan tes lagi terhadap atribut atau node leaf. Record yang kelasnya tidak diketahui kemudian diberikan kelas yang sesuai dengan kelas yang ada pada node leaf. Pada pohon keputusan setiap simpul leaf menandai label kelas. Proses dalam pohon keputusan yaitu mengubah bentuk data (tabel) menjadi model pohon (tree) kemudian mengubah model pohon tersebut menjadi aturan (rule) (J R Quinlan, 1993). –

Algoritma Insert Elemen y:
  1. Cari leaf yang tepat bagi y
Persis dgn BST, bandingkan y dgn isi node2 pd path yang tepat, dari ROOT turun menuju leaf.
         jika y sudah ada pd tree, insert gagal
         jika tree masih kosong, create root baru dengan elemen y di data_l (>)
         jika leaf yang tepat telah ditemukan, ada 3 kemungkinan:
A: Leaf hanya punya 1 elemen (data_l) (>)
         jika y > data_l : masukkan y sbg data_r (data_r = y)
         jika sebaliknya: geser elemen lama (data_r = data_l), dan masukkan y sbg data_l (data_l = y)
B: Leaf berisi 2 elemen (FULL) dan parent berisi 1 elemen
        Bandingkan ketiga elemen (2 elemen leaf dan y). Nilai tengah dimasukkan ke parent.
        Jika leaf adalah left_child dari parent, geser elemen parent ke kanan dan masukkan nilai tengah ke data_l parent.
        Pointer left_child dan middle_child pada parent harus digeser.
        Jika leaf adalah middle_child dari parent, masukkan nilai tengah ke data_r parent.
        Dua nilai terkecil dan terbesar, akan menjadi elemen pertama pada leaf yang lama dan leaf yang baru.
C: Jika leaf dan parent sudah berisi 2 elemen (FULL)
        Seperti kasus B, nilai tengah diserahkan pada parent. Karena parent sudah full, dilakukan hal yang sama menuju root hingga bertemu dgn 2-node.
        Jika pada path dari leaf hingga root, semua node merupakan 2-node, akan terbentuk root baru dengan elemen nilai tengah. Nilai terkecil dan terbesar akan menjadi 2 children dari root baru.
“Doing a few small 2-3 trees by hand helps to understand this algorithm”


Delete Elemen:
Penghapusan elemen berlawanan
  1. Cari elemen yang akan dihapus
  2. Jika elemen berada di leaf p
a)      Jika p 3-node (berisi 2 elemen)
            Elemen langsung dihapus, shg p hanya memiliki 1 elemen
a)      Jika p 2-node (berisi 1-elemen)
            Node parent p disebut r, dan sibling kiri/kanan p adalah q.
         Jika sibling q 3-node, dilakukan rotasi, elemen parent r diletakkan di p dan elemen q diletakkan di r
         Jika sibling q 2-node, dilakukan  penggabungan q dan q, sehingga jumlah children r berkurang 1
d)     Jika setelah rotasi/penggabungan node parent r kosong, berarti r = root, maka node p dijadikan root baru
3.      Jika elemen yang akan dihapus tidak ada di leaf, maka elemen tsb akan digantikan elemen terbesar dari subtree kiri atau elemen terkecil dari subtree kanan yang berada di leaf. Selanjutnya penghapusan elemen di leaf akan mengikuti langkah 2.

Mencari Leaf (daun)
void leaf(Tree *root){
if(root == NULL) printf("kosong!");
if(root->left!=NULL) leaf(root->left);
if(root->right!=NULL) leaf(root->right);
if(root->right == NULL && root->left == NULL) printf("%d ",root->data);
}




Daftar Pustaka

0 komentar:

Posting Komentar