Sabtu, 21 Maret 2020

Binary Search Tree

      Binary Search Tree adalah struktur data pohon biner berbasis simpul yang memiliki :

  • Subtree kiri dari sebuah node hanya berisi node dengan kunci lebih rendah dari kunci node.
  • Subtree kanan dari sebuah node hanya berisi node dengan kunci lebih besar dari kunci node.
  • Subtree kiri dan kanan masing-masing juga harus berupa pohon pencarian biner.
  • Tidak boleh ada duplikat node.


Mencari kunci 
Untuk mencari kunci yang diberikan di Binary Search Tree, pertama-tama kita harus membandingkannya dengan root, jika kunci tersebut ada pada root, kita mengembalikan root. Jika kunci lebih besar dari kunci root, kami merekursif untuk subtree kanan dari simpul root. Kalau tidak, kita akan mengrekursif untuk subtree kiri.

cara mencari kunci :
  • Mulai dari root.
  • Bandingkan elemen penyisipan dengan root, jika kurang dari root, lalu mengrekursif ke kiri, selain itu rekursif kanan.
  • Jika elemen untuk pencarian ditemukan di mana saja, kembalikan benar (return true), jika tidak kembalikan salah (return false).

Penyisipan kunci
Kunci baru selalu dimasukkan di daun. Kami mulai mencari kunci dari root hingga kami menyentuh simpul daun. Setelah simpul daun ditemukan, simpul baru ditambahkan sebagai anak dari simpul daun.

cara memasukan :
  • Mulai dari root.
  • Bandingkan elemen penyisipan dengan root, jika kurang dari root, mengrekursif ke kiri, selain itu rekursif kanan.
  • Setelah mencapai ujung, cukup masukkan simpul (node) di sebelah kiri (jika kurang dari saat ini) ke kanan.


Mohon maaf, jika terdapat kesalahan dalam penulisan dan materi. 
Terima kasih,




Kamis, 12 Maret 2020

Hash Table & Binary Tree



      Hash Table adalah struktur data yang efesien dan tersinkronisasi sehingga berguna pada thread dan merupakan suatu kontainer yang menyimpan elemen bersama dengan kunci. Kunci disini dapat berupa sembarang objek. Setiap kunci hanya memetakan satu nilai dan tidak dapat dibuat kunci duplikat.  

Keuntungan dari Hash Table :
  1. Menghitung indeks.
  2. Lebih efesien.
  3. Tersinkronisasi.
  4. Thread-safe.
Kerugian dari Hash Table :
  1. Sering sekali bertabrakan ketika record hash memiliki angka yang sama.
  2. Lebih lama dari Hash Map karena Hash Map tidak tersinkronisasi.
  3. Tidak efesien ketika mencari elemen  minimum dan maximum.
Tujuan dari Hash Table :

  1. Mempercepat kembali dari banyak data yang disimpan.
Hasil gambar untuk hash table
Contoh Hash Table


      Binary Tree adalah struktur hierarkis dan isinya dapat kosong atau dapat juga memuat sesuatu elemen yang disebut akar. Binary tree memuat 2 binary tree lainnya dapat disebut dengan subpohon kanan dan subpohon kiri.
Hasil gambar untuk binary tree sama dengan rekursif
Contoh Binary Tree


      Kesimpulan tentang implementasi Hashing Table di Blockchain adalah ya zaman sekarang blockchain menggunakan hash kriptografis bukan menggunakan hashing table. Hash kriptografis ini terbilang aman karean menganut komputasi yang cepat, tahan tabrakan, resistensi pra-gambar, Deterministik dan peruahan kecil pada input mengubah Hash
Contoh Hash Kriptografis di Blockchain 



Video Pembelajaran Hash Table:


Video Pembelajaran Binary Tree:




Mohon maaf, jika terdapat kesalahan dalam penulisan dan materi. 
Terima kasih,

Sabtu, 07 Maret 2020

STACK AND QUEUE

    Stack memiliki arti tumpukan. Tumpukan disini menggunakan metode LIFO (Last In First Out). Contohnya tumpukan buku, ketika kita menyusun buku yang paling bawah merupakan buku pertama yang kita taruh dan paling atas merupakan buku terakhir di taruh. Jika kita ingin mengeluarkan buku pertama yang ditaruh maka kita harus mengeluarkan buku yang paling terakhir kita taruh dan dilakukan sampai kita mendapatkan buku pertama. 
Hasil gambar untuk stack
Ilustrasi Gambar Stack dengan cara LIFO

Stack memiliki 2 cara operasi:
  1. Push digunakan untuk menambahkan data ke dalam stack
  2. Pop digunakan untuk menghapus data di dalam stack  


   Queue memiliki arti antrian. Antrian berbeda dengan stack. Antrian menggunakan metode FIFO (First In First Out). Contohnya ketika kita berbelanja dan ingin membayar maka kita harus mengantri. siapa yang mengantri duluan maka akan dapat membayar duluan dan pergi dengan belanjannya. 
Hasil gambar untuk queue

Ilustrasi Gambar Stack dengan cara FIFO

Queue memiliki 2 cara operasi:

  1. Enqueue digunakan untuk menambahkan data ke dalam queue
  2. Dequeue digunakan untuk menghapus data di dalam queue  




Video Pembelajaran


Mohon maaf, jika terdapat kesalahan dalam penulisan dan materi. 
Terima kasih,


Minggu, 01 Maret 2020

Linked List

Apa itu Linked List ?

Linked List adalah struktur data yang terdiri dari urutan rekaman data sehingga setiap catatan ada bidang yang berisi referensi ke catatan berikutnya dalam urutan.

Linked list berfungsi untuk menampung data lebih dari satu, kita dapat menggunakan array dalam program kita. Tapi array memesan memori secara statis

Linked List dibagi menjadi 2 jenis :


  1. Singly Linked List merupakan suatu linked list yang hanya memiliki satu variabel pointer saja. Dimana pointer tersebut menunjuk ke node selanjutnya, biasanya field pada tail menunjuk ke NULL.
  2. Doubly Linked List merupakan suatu linked list yang memiliki dua variabel pointer yaitu pointer yang menunjuk ke node selanjutnya dan pointer yang menunjuk ke node sebelumnya. Setiap head dan tailnya juga menunjuk ke NULL.
Hasil gambar untuk Doubly Linked List

CARA MENGGUNAKAN UNTUK MEMASUKAN DATA:


Singly Linked List
  • pertama-tama kita perlu mendefinisikan struktur node untuk daftar.
  • Misalkan kita ingin membuat daftar bilangan bulat.
struct tnode { 
int value; 
struct tnode *next; 
}; 
struct tnode *head = 0; 
head diatas merupakan pointer.
  • Untuk menyisipkan nilai baru, pertama-tama kita harus secara dinamis mengalokasikan node baru dan menetapkan nilai padanya lalu menghubungkannya dengan daftar yang ada.
  • Misalkan kita ingin menambahkan node baru di depan head.
 struct tnode *node =  
(struct tnode*) malloc(sizeof(struct tnode)); 
 node->value = x; 
 node->next  = head; 
 head = node;

operator diatas sama halnya dengan :
(*node).value = x; 
(*node).next  = head;



Tambahkan node baru di depan head. Dengan asumsi mengandung 10, 35, 27.


Doubly Linked list
  • Sama seperti dalam Singly Linked List , pertama-tama kita harus mengalokasikan node baru dan menetapkan nilainya, dan kemudian kita menghubungkan node dengan daftar yang ada.
  • Misalkan kita ingin menambahkan node baru di belakang tail. 
struct tnode *node =   
 (struct tnode*) malloc(sizeof(struct tnode));
node->value = x; 
node->next  = NULL;
node->prev  = tail; 
tail->next  = node;  
tail = node;


  • Misalkan kita ingin menyisipkan simpul baru di posisi tertentu (setiap lokasi antara head dan tail) 
struct tnode *a = ??;
struct tnode *b = ??;
// node baru akan dimasukan diantara a dan b
struct tnode *node =
    (struct tnode*) malloc(sizeof(struct tnode));
node->value  = x;
node->next  = b;
node->prev  = a;
a->next  = node;
b->prev  = node;


CARA MENGGUNAKAN UNTUK MENGHAPUS DATA :

Singly Linked List
  • Pertama-tama kita harus menemukan lokasi node yang menyimpan nilai yang ingin kita hapus, memindahkan, dan menghubungkan daftar yang tersisa. 
  • Misalkan nilai yang ingin kita hapus adalah x dan anggap x ada dalam daftar tertaut dan unik.
  • Ada dua kondisi yang harus kita perhatikan:
  • jika x ada di head node.
  • jika x tidak dalam head node. 
 struct tnode *curr = head; 
   // jika x di head node 
if ( head->value == x ) {  
head = head->next; 
          free(curr); 
}
// jika x tidak di head node(mencari lokasi) 
   else { 
   while ( curr->next->value != x )  
   curr = curr->next; 
   struct tnode *del = curr->next;
   curr->next = del->next; 
   free(del);
   } 

  • Menghapus 31 (terletak di head)


  • Menghapus 35 (tidak terletak di head)




Doubly Linked List

  • Untuk menghapus data di Doubly Linked List ada 4 kondisi yang harus diperhatikan :
  • Node yang akan dihapus adalah satu-satunya simpul dalam daftar tertaut.
  free(head);
  head = NULL;
  tail = NULL; 
  • Node yang akan dihapus adalah head.
   head = head->next;
   free(head->prev);
  head->prev = NULL;
  • Node yang akan dihapus adalah tail.
     tail = tail->prev;
  free(tail->next);
  tail->next = NULL;
  • Node yang akan dihapus bukan head atau tail.

   struct tnode *curr = head;
    while ( curr->next->value != x ) 
    curr = curr->next;
    struct tnode *a   = curr;
    struct tnode *del = curr->next;
    struct tnode *b   = curr->next->next;
    a->next = b;
    b->prev = a;
    free(del);



Kalian dapat juga belajar melalui video yang telah saya berikan.


Mohon maaf, Jika pembahasan kurang lengkap dan memiliki banyak kesalahan dalam penulisan. Demikian pembahasan tentang Linked List.

Terima kasih.