Think More Talk Less, and Stay Cool

Halaman

Jumat, 01 Mei 2020

AVL Tree dan B-Tree


AVL Tree
Dalam ilmu komputer, AVL tree adalah binary tree yang dapat menyeimbangkan dirinya sendiri. AVL tree merupakan subtree kiri dan subtree kanan yang memiliki perbedaan tinggi atau level maksimal 1. Dengan AVL tree, akan dipersingkat dan disederhanakan dalam waktu pencarian dan bentuk treenya. Di dalam AVL tree, path pencarian lokasi dilakukan operasi insert dimulai dari root. Operasi pencarian elemen pada AVL tree relatif sama dengan binary search tree. Hal ini dikarenakan AVL tree itu sedikit dimodifikasi dengan menambah properti khusus yaitu keseimbangan pohon dari binary search tree.
Terdapat 4 kasus yang ada pada AVL tree :
1.       Left – Left : simpul terdalam terletak di sub pohon kiri anak kiri T.
2.       Right – Right : simpul terdalam terletak di sub pohon kanan anak kanan T.
3.       Right – Left : simpul terdalam terletak di sub pohon kanan anak kiri T.
4.       Left – Right : simpul terdalam terletak di sub pohon kiri anak kanan T.
Single Rotation
Berdasarkan kasus yang disebutkan diatas, kasus 1 & 2 merupakan kasus single rotation.


Double Rotation
Berdasarkan kasus yang disebutkan diatas, kasus 3 & 4 merupakan kasus double rotation.


B-Tree
Dalam ilmu komputer, B-tree adalah struktur data pohon self-balancing yang memelihara data yang diurutkan dan memungkinkan pencarian, akses sekuensial, penyisipan, dan penghapusan dalam waktu logaritmik. B-tree menggeneralisasikan pohon pencarian biner, memungkinkan untuk node dengan lebih dari dua anak. Tidak seperti pohon pencarian biner self-balancing lainnya, B-tree sangat cocok untuk sistem penyimpanan yang membaca dan menulis blok data yang relatif besar, seperti disk. Ini biasanya digunakan dalam database dan sistem file.
Pencarian di B-tree mirip dengan pencarian di Binary Search Tree. Misalnya kunci yang akan dicari adalah k. Pertama-tama mulai dari root dan secara rekursif melintasi. Untuk setiap node non-leaf yang dikunjungi, jika node tersebut memiliki kunci, cukup mengembalikan node tersebut. Kalau tidak, kembali ke anak yang sesuai dari node. Jika kami mencapai simpul daun dan tidak menemukan k di simpul daun, kami mengembalikan NULL. Perhatikan bahwa anak yang tepat sebelum kunci pertama yang lebih besar.
Traversal pada B-tree juga mirip dengan Inorder traversal dari Binary Tree. Pertama-tama mulai dari child paling kiri, mencetak secara rekursif child paling kiri, kemudian mengulangi proses yang sama untuk child dan kunci yang tersisa. Pada akhirnya, cetak secara rekursif child yang paling kanan.

Sumber :

Summary 27 April 2020

AVL

AVL adalah versi lanjutan dari BST yang mana menutup kekurangan dari BST. AVL bertujuan untuk menyeimbangkan sub tree dalam BST yang tidak seimbang kanan dan kiri nya. AVL memiliki 2 cara untuk menutup worstcase dari BST, cara ini disebut juga dengan rebalancing.

cara pertama ialah single rotation, cara ini merotate arah sebalik nya dari worst case BST seperti node tersusun secara linear sebanyak 3 level sehingga terlihat seperti linklist. Algoritma ini menyusun BST yang linear menjadi full binary tree. Cara nya dengan mengankat node di level 1 ke level 0 menjadi parent lalu node parent menjadi anak kiri dari node level 1 tadi dan anak kanan node level 1 tadi tetaplah anak kanan nya sendiri

cara kedua ialah double rotation, cara ini merotate 2 kali sub tree. worstcase BST seperti zigzag. Algoritma double rotation adalah lanjutan daru single rotation. Langkah pertama subtree dibuat sedemikian hingga lurus seperti linked list lalu node paling bawah akan menjadi parent dan parent sebelum nya akan menjadi anak kiri dan node kanan nya ialah parent dari node paling bawah tersebut.

Berikut adalah simulasi dari kasus yang biasa terjadi

Single Rotation :

Left Left 

Right Right

Double Rotation :

Left Right
Right Left




Senin, 06 April 2020

Summary Semester 2 Before UTS


Linked List

Linked list (bahasa Indonesia : senarai berantai) adalah sebuah struktur data yang digunakan untuk menyimpan sejumlah objek data. Linked list disimpan secara terurut sehingga lebih memungkinkan atas efektifnya penambahan, pengurangan, dan pencarian atas elemen data. Linked list merupakan sekumpulan nodes yang merepresentasikan sebuah sequence, dimana nodes merupakan koleksi linear dari data. Setiap node tersebut akan menunjukkan node lain melalui sebuah pointer.
Operasi – Operasi Linked List :
1.       Insert : menambahkan sebuah simpul baru ke dalam suatu linked list.
2.       IsEmpty : menentukan apakah linked list kosong atau tidak.
3.       Find First : mencari elemen pertama dari linked list.
4.       Find Next : mencari elemen sesudah elemen yang ditunjuk now.
5.       Retrieve : mengambil elemen yang ditunjuk oleh now. Elemen tersebut lalu dikembalikan oleh fungsi.
6.       Update : mengubah elemen yang ditunjuk oleh now dengan isi dari sesuatu.
7.       Delete Now : menghapus elemen yang ditunjuk oleh now. Jika yang dihapus adalah elemen pertama dari linked list (head), head akan berpindah ke elemen berikutnya.
8.       Delete Head : menghapus elemen yang ditunjuk head. Head berpindah ke elemen sesudahnya.
9.       Clear : menghapus linked list yang sudah ada. Fungsi ini wajib dilakukan bila anda ingin mengakhiri program yang menggunakan linked list. Jika anda melakukannya, data-data yang dialokasikan ke memori pada program sebelumnya akan tetap tertinggal di dalam memori.
Jenis – Jenis Linked List :
1.       Single Linked List
Single Linked List (bahasa Indonesia : senarai tunggal) hanya memiliki satu tautan atas node berikutnya dalam sebuah linked list. Dalam single linked list, ada satu pointer yaitu pointer head yang menunjuk ke node selanjutnya.
linkedlist
2.       Double Linked List
Berbeda dengan single linked list, double linked list memiliki pointer penunjuk dua arah yaitu kearah node sebelum dan node sesudah. Struktur data atas tiap node memiliki rujukan pada node sebelum dan berikutnya.
dll
3.       Circular Linked List
Pada circular linked list, rujukan pada node terakhir akan merujuk pada node pertama, dan begitu juga sebaliknya bila yang digunakan sebagai dasar implementasi adalah double linked list.

Stack dan Queue
Pengertian Stack
Stack (bahasa Indonesia : tumpukan) dalam ilmu komputer adalah suatu kumpulan data yang menggunakan prinsip data yang terakhir dimasukkan akan dikeluarkan pertama dari tumpukan tersebut. Dengan kata lain kumpulan data seolah-olah akan terlihat seperti ada data yang diletakkan di atas data lain. Stack tersebut dapat diimplementasikan sebagai representasi berkait (kontigu).
Operasi Stack
1.       InsertFirst() – menambahkan sebuah elemen ke tumpukan
2.       DeleteFirst() – menghapus sebuah elemen tumpukan
3.       IsEmpty() – mengecek stack kosong atau sudah ada elemennya
4.       IsFull() – mengecek stack sudah penuh atau belum
5.       Clear() – menghapus semua data
6.       Peek() – melihat data TOP
Queue
Description: Hasil gambar untuk queue
Queue (bahasa Indonesia : antrian) dalam ilmu komputer adalah suatu kumpulan struktur data linear dimana ada penambahan komponen yang hanya dapat dilakukan pada satu sisi (belakang/depan) dan pengurangan dilakukan di ujung lain.
Operasi Queue
1.       Create() – menciptakan menginisialisasi queue
2.       IsEmpty() – memeriksa apakah antrian sudah penuh atau belum
3.       IsFull() – mengecek apakah sudah penuh atau belum
4.       Enqueque() – menambah elemen ke dalam antrian
5.       Dequeque() – menghapus elemen terdepan (head) dari antrian
6.       Clear() – menghapus elemen antrian dengan cara membuat tail dan head = -1
7.       Tampil() – menampilkan nilai-nilai elemen antrian
Notasi Prefix, Infix, dan Postfix
No.
Infix
Prefix
Postfix
1.
A + B
+ A B
A B +
2.
(A + B) * C
* + A B C
A B + C *
3.
A * (B + C)
* A + B C
A B C + *

1.       Prefix, notasi yang terbentuk dari operator dan operand dengan menggunakan metode penulisan operator di depan operand.
2.       Infix, notasi yang terbentuk dari operator dan operand dengan meletakkan operator di antara dua operand (dengan tanda kurung).
3.       Postfix, notasi yang terbentuk dari operator dan operand dengan menuliskan operator setelah operand (tanpa tanda kurung).

Hashing Table and Binary Tree
Pengertian Hash Table
Hash table dalam ilmu komputer merupakan sebuah struktur data yang digunakan untuk menyimpan data sementara. Hashing adalah teknik untuk melakukan penambahan, penghapusan dan pencarian dengan constant average time. Hashing digunakan untuk menyimpan data yang cukup besar pada abstract data type (ADT). Selain itu, hashing juga digunakan untuk mempercepat pencarian dalam tabel data atau pembandingan data seperti di dalam database, mencari kesamaan dan sebagainya.
Fungsi Hash
1.       Mid square
Mid square adalah teknik hashing yang menghasilkan key unik. Teknik ini dapat mengambil nilai dan dapat dikuadratkan. Sehingga dapat menghasilkan key dengan keacakan tinggi jika mengambil nilai yang cukup besar. Untuk mendapatkan alamat relatif, nilai key dikuadratkan lalu beberapa digit diambil dari tengah.
Fungsi : h(k) = s
Contoh :
Key
Squared Value
Middle Part
3121
9740641
406
3122
9746884
468
3123
9753129
531

2.       Division
Fungsi : h(z) = z mod M
Metode division sering menghasilkan nilai hash yang sama dari dua atau lebih nilai aslinya (bentrokan). Sehingga, dibutuhkan mekanisme khusus untuk menangani bentrokan tersebut yaitu dengan kebijakan resolusi bentrokan. Alamat relatif dari nilai key adalah sisa dari hasil pembagian nilai key dengan bilangan pembagi.
Contoh :
ABCD
(64 + 1 + 64 + 2 + 64 + 3 + 64 + 4) % 97
76
HIKE
( 64 + 8 + 64 + 9 + 64 + 11 + 64 + 5) % 97
2
PPQQ
( 64 + 16 + 64 +16 + 64 + 17 + 64 + 17) % 97
35
COBB
( 64 + 3 + 64 + 15 + 64 + 2 + 64 + 2) % 97
88

3.       Folding
Folding dapat dipecah menjadi beberapa bagian, kemudian tiap bagian akan digabungkan lagi ke dalam bentuk yang lain untuk mendapatkan hash key.
Contoh :
Phone Number
3 Group
Index
5373737
53 + 73 + 737
863
5125858
51 + 25 + 858
934
5315151
53 + 15 + 151
219

4.       Collision
Bila terjadi collision (tabrakan) akan diselesaikan dengan menggunakan collision resolution. Collision terjadi jika dua buah keys dipetakan pada sebuah sel. Ada 2 buah cara untuk menangai collision :
1)      Linear Probing
Linear probing adalah salah satu cara untuk menemukan lokasi record yang tak dapat disimpan di home addressnya. Linear probing ini merupakan sebuah pencarian secara sequential (linear) dari home address sampai lokasi yang kosong.
h[  ]
Value
Step
0
atan
1
1
acos
2
2
char
1
3
define
1
4
exp
1
5
float
1
6
ceil
5
7
floor
3

2)      Chaining
Chaining dapat mengakses synonym dengan fasilitas link list untuk record daam kelas ekivalen. Link list record dengan home address yang sama tidak akan mengurangi jumlah collision, melainkan akan mengurangi waktu akses untuk me-retrieve record yang tidak terdapat di home addressnya.
h[  ]
Value
0
atan -> acos
1
NULL
2
char -> ceil
3
define
4
exp
5
float -> floor
6
NULL
7
NULL

Implementasi Hashing Table Pada Block Chain
Implementasi hashing table pada block chain dapat menggunakan algoritma hashing SHA-256. Ini dapat memberikan bukti kriptografi untuk otentikasi dan integritas data. Fungsi hash kriptografi tersebut adalah untuk mengambil data dari blok sebelumnya dan mengubahnya menjadi compact string yang memungkinkan sistem mendeteksi adanya sabotase. Hash ini merupakan sebuah algoritma yang memetakan data secara acak ke dalam bentuk string yang berukuran tetap. Hash ini dirancang untuk dapat menjadi sebuah fungsi satu arah. Hash memungkinkan setiap blok dapat memverifikasi integritasnya sehingga setiap blok tidak perlu memiliki nomor seri.
Binary Tree
Dalam ilmu komputer, binary tree (bahasa Indonesia : pohon biner) adalah sebuah pohon dalam struktur data yang memiliki simpul paling banyak dua anak pada setiap simpulnya. Binary tree ini setiap nodenya memiliki paling banyak dua anak dan dinamakan dengan anak kiri dan anak kanan.
Node Pada Binary Tree
Tipe Binary Tree
1.       Perfect Binary Tree
Perfect binary tree adalah sebuah binary tree yang semua daunnya memiliki kedalaman yang sama.
bt-2.gif

2.       Complete Binary Tree
Complete binary tree adalah sebuah binary tree yang di mana semua daunnya memiliki kedalman n atau n-1 untuk beberapa n. Semua anak pada tingkat terakhir harus menempati titik paling kiri secara teratur dengan tidak ada titik yang menganggur di antara keduanya.
bt-3.gif

3.       Skewed Binary Tree
Skewed binary tree adalah binary tree di mana setiap node memiliki paling banyak satu anak.
bt-4.gif


Sumber :