Minggu, 05 April 2020

Rangkuman-before-uts.


 I
Stack & Queue

Stack
Pengertian Stack atau Tumpukan adalah suatu stuktur data yang penting dalam pemrograman yang mempunyai sifat LIFO (Last In First Out), barang yang terakhir masuk ke dalam stack akan menjadi benda pertama yang dikeluarkan dari stack.  Stack (Tumpukan) adalah list linier yang punya elemen puncaknya (TOP) dan Aturan penyisipan dan penghapusan elemennya tertentu. Penyisipan  dan Penghapusan selalu dilakukan di TOP.
Macam-macam operasi di stack :
  • Push(x) : memasukkan sebuah nilai ke dalam stack.
  • Pop() : menghapus nilai terakhir di posisi paling atas dari sebuah tumpukan.
  • Top() :  posisi data teratas dari tumpukan.
Contoh-contoh stack :
 1.     Stack dengan Array
  •  Sesuai dengan sifat stack, pengambilan atau penghapusan elemen dalam stack harus dimulai dari elemen teratas.
2. Double Stack dengan Array   
  •  Metode ini adalah teknik khusus yang dikembangkan untuk menghemat pemakaian memori dalam pembuatan dua stack dengan array. Intinya adalah penggunaan hanya sebuah array untuk menampung dua stack.
Prefix, Infix, dan Postfix Notation.
Prefix  : Operator yang di tulis sebelum operan. (operator operan operan)
Contoh: + 4 / *6 - 5 2 3
Infix    : Operator yang ditulis diantara operan. (operan operator operan)
Contoh: 4 + 6 * (5 - 2) / 3
Postfix : Operator yang ditulis setelah operan. (operan operan operator)
Contoh: 4 6 5 2 - * 3 / +

Contoh penyelesaian dari persamaan prefix:
+ 4 / *6 - 5 2 3
+ 4 / *6 3 3
+ 4 / 18 3
+ 4 6
10

Contoh penyelesaian dari persamaan infix:
4 + 6 * (5 -2) / 3
4 + 6 * 3 / 3
4 + 18 /3
4 + 6
10

Contoh penyelesaian dari persamaan postfix:
4 6 5 2 - * 3 / +
4 6 3 * 3 / +
4 18 3 / +
4 6 +
10


============================================================
Queue
Queue merupakan suatu struktur data linear. Konsepnya hampir sama dengan Stack, perbedaannya adalah operasi penambahan dan penghapusannya saja, penghapusan dilakukan pada bagian depan (front) dan penambahan berlaku pada bagian belakang (Rear).  Queue(urutan) dapat diartikan adalah data yang pertama kali masuk maka data tersebut akan pertama kali keluar First in First Out (FIFO). Queue juga dapat diimplementasikan dengan penggunaan array atau linked list.

Seperti pada stake, queue juga memiliki beberapa operasi yang biasa digunakan seperti:
  •     Push(x): menambahkan item x ke belakang antrian
  •     Pop()       : menghapus item dari depan antrian
  •     Front(): mengungkapkan / mengembalikan item paling depan dari antrian.
I.          Breadth-first search adalah algoritma yang melakukan pencarian secara melebar yang mengunjungi suatu simpul kemudian mengunjungi semua simpul yang bertetangga dengan simpul tersebut.
II.        Algoritma DFS (Depth First Search) adalah salah satu algoritma yang digunakan untuk pencarian jalur. Algoritma ini mirip dengan algorima BFS yang sudah dijelaskan sebelumnya. Jika Algoritma BFS (Breadth First Search) melakukan perhitungan secara terurut dari urutan pertama sampai urutan terakhir, maka algoritma ini melakukan kebalikannya, yaitu melakukan perhitungan secara terurut dari urutan terakhir. Setelah menghabiskan semua kemungkinan dari titik terakhir, kemudian berbalik kembali ke titik-titik sebelumnya sampai pada titik pertama.
Deques
Deques adalah suatu daftar/list dimana elemen yang digunakan untuk memasukkan(insert) atau menghapus(delete) di bagian kedua ujungnya yaitu head dan tail.
Priority Queue
Priority Queue adalah tipe data abstrak di mana masing-masing elemen diberi prioritas.
Aturan umum elemen antrian prioritas adalah:
  •    Elemen dengan prioritas lebih tinggi adalah proses sebelum elemen dengan prioritas lebih rendah. 
  •      Dua elemen dengan prioritas yang sama diproses berdasarkan urutan kedatangan.
 ==============================================
II
Hashing Table 

Apa itu Hashing
Hashing atau juga yang dikenal sebagai Hashing Algorithm adalah transformasi dari beberapa input menjadi fixed-value yang lebih pendek, dan simple dibanding dengan alamat data aslinya, yang mewakili input aslinya.  
Hash atau Hashing berarti memenggal dan kemudian menggabungkan, dari konsep hashing tersebut Hash dapat membantu dalam proses mengindeksdan megambil data dalam database karena Memiliki keuntungan lebih cepat dalam insertion dan searching value yang ada di array, dari pada mencari dengan nilai aslinya. 

Komponen yang harus dimiliki dalam hashing adalah:
  • key atau disebuh dengan hashed key adalah cara membuat karakter yang akan menjadi identifikasi baru dari value agar lebih mudah dicari datanya, dan  akan dimasukan ke dalam hashing table.
  • Value adalah data yang dimasukkan ke dalam array.
Hash Table
Hash table merupakan salah satu struktur data yang digunakan dalam penyimpanan data menggunakan key value yang didapat dari nilai data itu sendiri. Dengan key value didapatlah hash value. Tujuan dari hash table adalah untuk mempercepat proses pencarian dari banyak data yang disimpan. Karena dalam penyimpanan data di Hash table menggunakan key penyimpanan, sehingga waktu yang dibutuhkan untuk penambahan data (insertions), penghapusan data (deletions), dan pencarian data (searching) menjadi lebih cepat.
Ada beberapa cara hashing string menjadi key, diantaranya:
  • Mid-square
  • Division
  • Folding
  • Digit extraction
  • Rotating hash 
Implementasi Hashing Table pada BlockChain
blockchain adalah implementasi peer-to-peer, yang berarti bahwa seluruh blockchain disimpan di setiap peer. List pada blockchain tersebut dapat terus bertambah hingga tak terhingga. Setiap blok memiliki nilai hash dari blok sebelumnya, waktu pembuatan blok, dan data. Desain blockchain yang seperti itu membuah tercegahnya resisten terhadapat pengubahan, karena setiap perubahan pada suatu blok akan membuat blok selanjutnya menjadi tidak valid. Untuk menambah keamanan, blockchain disimpan dalam jaringan terdistribusi dengan protokol peer-to-peer tertentu. Sehingga list blok tersebut terduplikasi di banyak server.
 



======================================================
 
Binary Tree
Merupakan salat Satu bentuk Struktur Data tidak linier Yang menggambarkan hubungan Yang bersifat hirarkis (hubungan one to many) antara elemen-elemen. Tree Bisa didefinisikan sebagai kumpulan Simpul / node dengan Satu elemen KHUSUS Yang disebut root Dan Node lainnya terbagi menjadi Himpunan-Himpunan Yang tak saling berhubungan Satu sama lainnya (disebut subtree). Untuk jelasnya, di Bawah Akan diuraikan istilah-istilah umum dalam tree.
Pohon biner adalah pohon dengan syarat bahwa tiap node hanya memiliki boleh maksimal dua subtree dan kedua subtree tersebut harus terpisah. Sesuai dengan definisi tersebut, maka tiap node dalam binary tree hanya boleh memiliki paling banyak dua anak/child.
  • Istilah umum dalam tree :
1.    Predecessor : node yang berada diatas node tertentu
2.    Successor : node yang berada di bawah node tertentu
3.    Ancestor : seluruh node yang terletak sebelum node tertentu dan terletak pada jalur yang sama
4.    Descendant : seluruh node yang terletak sesudah node tertentu dan terletak pada jalur yang sama
5.    Parent : Predecessor level di atas suatu node
6.    Child : successor satu level di bawah suatu node
7.    Sibling : node-node yang memiliki parent yang sama dengan suatu node
8.    Subtree : bagian dari tree yang berupa suatu node beserta descendant nya dan memiliki semua karakteristik dari tree tersebut
9.    Size : banyaknya node dalam suatu tree
10. Height : banyaknya tingkatan/level dalam suatu tree
11. Root : satu-satunya node khusus dalam tree yang tak punya predecessor
12. Leaf : node-node dalam tree yang tak memiliki successor
13. Degree : banyaknya child yang dimiliki suatu node

Tipe - tipe binary tree
  • Perfect Binary Tree, yaitu Binary Tree yang tiap nodenya memiliki dua child dan tiap subtree harus mempunyai panjang path yang sama.
  • Complete Binary Tree, Mirip dengan Full Binary Tree, namun tiap subtree boleh memiliki panjang path yang berbeda. Node kecuali leaf memiliki 0 atau 2 child










  • Skewed Binar Tree, Binary Tree yang semua nodenya hanya memiliki satu child


 

  • Balanced Binary Treeadalah jenis tree yang tidak ada daun yang lebih jauh dariakar daripada daun lainnya





 

Implementasi Binary Tree
  •         Double pointer, maka fungsi insert / push, akan jadi seperti ini :
Perbedaan cara memanggil fungsi single dan double pointer adalah seperti ini :
     o   Contoh single: push(root,50);
     o   Contoh double: push2(&root,50);
Jika dilihat dari code di atas, code double pointer kita bisa melakukan passing by address. Sehingga ketika kita melakukan malloc atau memanggil newNode pada fungsi push2, maka root yang aslinya akan kena malloc juga. Berbeda dengan single pointer, jika kita melakukan node = newNode(a), maka root yang asli tidak akan ikut kena malloc, Karena ini merupakan passing by value.

Source:

https://www.geeksforgeeks.org/binary-tree-data-structure/

Tidak ada komentar:

Posting Komentar