--- TUGAS BLOG ALGO-BINUS Mingguan ---
Heap and Tries
-------------------------------------
------------------------------------------------------
mengeprint semua kata lengkap yang memiliki awalan okay, dengan code :
-------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------
------------------------------------------------------
1. Heap
Heap adalah sebuah complete binary tree pada struktur data yang memenuhi properti heap. Properti heap yang dimaksud adalah min heap dan max heap.
Heap dapat diimplementasikan menggunakan linked-list, tapi akan lebih mudah jika menggunakan array.
2. Min-Heap
Pada min heap, setiap elemen node pada tree lebih kecil daripada children/anaknya. Hal ini berarti elemen/nilai terkecil pada tree tersebut harus terletak pada root dan nilai/elemen tertinggi pada tree terletak di salah satu leaf/daun.
Contoh min-heap tree:
3. Max-Heap
Pada max heap, setiap elemen node lebih besar daripada children/anaknya (kebalikan min-heap). Hal ini berarti elemen/nilai terkecil pada tree tersebut harus terletak pada salah satu leaf/daun dan nilai/elemen tertinggi pada tree terletak di root.5. Heap dengan Priority Queue
Implementasi heap efisien dengan priority queue struktur data.
1. find-min = mencari elemen/nilai terkecil dalam heap
2. insert = meng-insert/menambahkan elemen baru ke dalam heap
3. delete-min = menghapus elemen/nilai terkecil pada heap
delete-min disebut juga pop, sedangkan insert disebut juga push.
1. find-min = mencari elemen/nilai terkecil dalam heap
2. insert = meng-insert/menambahkan elemen baru ke dalam heap
3. delete-min = menghapus elemen/nilai terkecil pada heap
delete-min disebut juga pop, sedangkan insert disebut juga push.
6. Heap dengan Array
Heap biasanya diemplementasikan melalui array. Elemen-elemen heap dalam array disimpan berdasarkan index 1 sampai N dengan berurutan dari atas kebawah dan dari kiri ke kanan node pada tree. *Root disimpan dalam index 1 (index 0 dibiarkan kosong/tidak digunakan)
Contoh heap dengan array:
Setiap node pada array ini berhubungan dengan parent, anak/child kiri, dan anak/child kanan nya masing-masing
Jika index dari suatu node adalah x, maka:
Jika index dari suatu node adalah x, maka:
- Parent(x) = x / 2
- Left-child(x) = 2 * x -->(anak kiri(x))
- Right-child(x) = 2 * x + 1 --> (anak kanan(x))
#rumus inilah yang menjadi alasan index pada heap array dimulai dari 1
7. Pengaplikasi-an Heap
Heap biasanya sering digunakan untuk:
- Sorting dengan heap
- Algoritma selection
- Algoritma Graph
8. Tries
Tries atau prefix tree adalah sebuah tree yang tersusun/berurutan pada struktur data yang digunakan untuk menyimpan kumpulan array (biasanya berupa string).
TRIES berasal dari kata RETRIEVAL, karena tries dapan menemukan sebuat kata dalam kamis dengan hanya dengan menggunakan kata depan dari kata tersebut.
9. Pengaplikasi-an Tries
Contohnya adalah ketika sebuat web browser dapat otomatis menyelesaikan kata yang kita tulis (auto-complete) atau dengan menunjukkan pada pengguna banyaknya kemungkinan-kemungkinan dari teks yang akan ditulis. Contoh lainnya adalah spell-checker dalam mengecek kata yang ada dalam kamus apakah sudah sesuai apa belum.
10. Tree of Tries
Setiap vertex menyimpan sebuah kata atau kata depan.
Root dalam Tries menyimpan sebuah kata kosong ('").
Contoh Tries yang menyimpan/mengandung kata:
- ALGO
- API
- BOM
- BOX
- BOSAN
- BOR
10. Struktur Tries
Kita dapat menggunakan struktur ini dalam mengimplementasi tree:
struct
trie {
char chr;
int
word;
struct trie* edge[128];
}
*root = 0;
root
= (struct trie*)malloc(sizeof(struct trie));
root->chr = ‘’;
root->word
= 0;
note: chr is
the character stored in that node.
word is 1
if there is a word ends at this node, 0 otherwise.
10. Insertion dalam Tries
Untuk menambahkan/memasukkan sebuah kata pada tries, kita dapat menggunakan kode:
main function
char s[100];
insert(root, s);
void
insert(struct trie *curr, char *p) {
if ( curr->edge[*p] == 0 )
curr->edge[*p] = newnode(*p);
if ( *p == 0 ) curr->word = 1;
else insert(curr->edge[*p],p+1);
else insert(curr->edge[*p],p+1);
}
newnode()
function
struct
trie* newnode(char x) {
struct trie* node =
(struct trie*)malloc(sizeof(struct trie));
node->chr
= x;
node->word = 0;
for (i = 0; i < 128; i++ )
node->edge[i] = 0;
return node;
}
11. Finding dalam Tries dengan Prefix
Untuk mencari sebuah kata lengkap jika kita memiliki sebuat kata awal dari kata tersebut, kita dapat menggunakan kode:
contoh mencari kata dengan awalan okay:
char
s[100] = {“...”}; // global
int i, n, okay;
struct
trie *curr;
n = strlen(s);
okay
= 1;
curr
= root;
for
( i = 0; i < n && okay == 1; i++ )
if ( curr->edge[s[i]] == 0 ) okay = 0;
else curr = curr->edge[s[i]];
if
( okay ) find(curr,n);
mengeprint semua kata lengkap yang memiliki awalan okay, dengan code :
void
find(struct trie *curr, int x) {
if ( curr->word == 1 ) {
s[x] = 0;
puts( s );
}
for ( i = 0; i < 128; i++ )
if ( curr->edge[i] != 0 ) {
s[x] = i;
find(curr->edge[i],x+1);
}
}
Referensi:
- Power Point Heap and Tries (L)
-------------------------------------------------------------------------------------------------------------
Berikut adalah tugas mingguan membuat blog berisi rangkuman materi Heap and Tries yang telah saya pelajari.
Sekian,
Sekian,
---Terima kasih.---
Nama: Felina Suryadi
NIM: 2301914604
Kelas Besar: CB01
-------------------------------------------------------------------------------------------------------------