Heap & Tries
halo guys dulur-dulur sekalian
kali ini ane bakalan ngasih beberapa materi tentang heap & tries, tapi sejujurnya sejauh ini kalau teorinya sendiri sih ane juga blom terlalu mateng jadi kita ambil dari web lain saja untuk beberapa materi yang kemudian dirangkum disini
jadi apa sih Heap itu?
trus kok mirip sama B-tree?
jadi Heap itu ada macemnya, contohnya Min Heap & Max Heap
perbedaan antara Heap sama B-tree yang paling utama itu adalah child / anak sebelah kiri sama child yang sebelah kanan itu gk ada hubungannya sama sekali
jadi gimana tuh?
pada Heap, hubungan child/anak yang kanan dan kiri hanyalah kepada induknya saja
Min Heap
apasih min heap?
min heap adalah heap yang dimulai dari angka paling kecil ke angka yang paling besar
cara penggambarannya kurang lebih ya seperti B-tree namun ini beda kok..
nah sekarang Max Heap
yap , kebalikan dari Min Heap dari angka terbesar sampai angka terkecil
yap berikut tadi beberapa contoh bentuk pengoperasian Heap , lebih mudah memang jika dipraktekan langsung dengan video / animasi. kalau saya sendiri jujur saja belum terlalu paham dan masih harus melihat youtube dan juga soal teorinya daripada missinformation lebih baik saya berikan langsung dari source web nya karena lebih terpercaya
Tries
nah sekarang kita ke materi tries
apa sih tries itu? tries itu adalah sebuah sebuah pohon yang dimulai dari node kosong dan juga node lain hanyalah berupa awalan katanya saja
contoh kodingan dari geeksforgeeks
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#define ARRAY_SIZE(a) sizeof(a)/sizeof(a[0])
#define ALPHABET_SIZE (26)
#define CHAR_TO_INDEX(c) ((int)c - (int)'a')
struct
TrieNode
{
struct
TrieNode *children[ALPHABET_SIZE];
bool
isEndOfWord;
};
struct
TrieNode *getNode(
void
)
{
struct
TrieNode *pNode = NULL;
pNode = (
struct
TrieNode *)
malloc
(
sizeof
(
struct
TrieNode));
if
(pNode)
{
int
i;
pNode->isEndOfWord =
false
;
for
(i = 0; i < ALPHABET_SIZE; i++)
pNode->children[i] = NULL;
}
return
pNode;
}
void
insert(
struct
TrieNode *root,
const
char
*key)
{
int
level;
int
length =
strlen
(key);
int
index;
struct
TrieNode *pCrawl = root;
for
(level = 0; level < length; level++)
{
index = CHAR_TO_INDEX(key[level]);
if
(!pCrawl->children[index])
pCrawl->children[index] = getNode();
pCrawl = pCrawl->children[index];
}
pCrawl->isEndOfWord =
true
;
}
bool
search(
struct
TrieNode *root,
const
char
*key)
{
int
level;
int
length =
strlen
(key);
int
index;
struct
TrieNode *pCrawl = root;
for
(level = 0; level < length; level++)
{
index = CHAR_TO_INDEX(key[level]);
if
(!pCrawl->children[index])
return
false
;
pCrawl = pCrawl->children[index];
}
return
(pCrawl != NULL && pCrawl->isEndOfWord);
}
int
main()
{
char
keys[][8] = {
"the"
,
"a"
,
"there"
,
"answer"
,
"any"
,
"by"
,
"bye"
,
"their"
};
char
output[][32] = {
"Not present in trie"
,
"Present in trie"
};
struct
TrieNode *root = getNode();
int
i;
for
(i = 0; i < ARRAY_SIZE(keys); i++)
insert(root, keys[i]);
printf
(
"%s --- %s\n"
,
"the"
, output[search(root,
"the"
)] );
printf
(
"%s --- %s\n"
,
"these"
, output[search(root,
"these"
)] );
printf
(
"%s --- %s\n"
,
"their"
, output[search(root,
"their"
)] );
printf
(
"%s --- %s\n"
,
"thaw"
, output[search(root,
"thaw"
)] );
return
0;
}
Tidak ada komentar:
Posting Komentar