Jumat, 17 Juni 2011

Trie

TRIE
Tugas Pre UAS Struktur Data
Nama    : Bagus Riady
Nim       : 1401140384
Kelas     : 02 PVT

Pengertian Trie
Dalam ilmu komputer, trie, atau pohon awalan, adalah sebuah pohon struktur data yang memerintahkan digunakan untuk menyimpan sebuah array asosiatif di mana kunci biasanya string. Tidak seperti pohon pencarian biner, tidak ada node di pohon menyimpan kunci yang terkait dengan simpul itu; sebaliknya, posisinya di pohon menunjukkan apa kunci itu terkait dengan. Semua keturunan dari sebuah node memiliki awalan umum dari string yang berhubungan dengan node itu, dan akar dikaitkan dengan string kosong. Nilai biasanya tidak berhubungan dengan setiap node, hanya dengan beberapa node daun dan batin yang sesuai dengan kunci yang menarik.
Para trie Istilah berasal dari pengambilan. Setelah etimologi, penemu, Edward Fredkin, mengucapkannya / tri ː / "pohon" Namun, itu diucapkan / traɪ / "mencoba" oleh penulis lain.
Dalam contoh yang ditunjukkan, kunci tercantum dalam node dan nilai-nilai di bawah mereka. Setiap kata bahasa Inggris yang lengkap memiliki nilai integer sewenang-wenang yang terkait dengan itu. Trie dapat dilihat sebagai automaton deterministik yang terbatas, meskipun simbol pada setiap sisinya ini seringkali implisit dalam urutan cabang.
Hal ini tidak perlu untuk kunci secara eksplisit disimpan dalam node. (Dalam gambar, kata-kata hanya ditampilkan untuk menggambarkan bagaimana trie bekerja.)
Meskipun paling umum, mencoba tidak perlu mengetik dengan string karakter. Algoritma yang sama dengan mudah dapat diadaptasi untuk melayani fungsi yang sama daftar memerintahkan setiap membangun, misalnya, permutasi pada daftar angka atau bentuk. Secara khusus, trie bitwise adalah kunci pada bit individu membuat sebuah ukuran, pendek tetap bit seperti nomor integer atau pointer ke memori.



Contoh struktur Trie :  


A trie for keys "A", "to", "tea", "ted", "ten", "i", "in", and "inn".
Keuntungan yang relatif dalam mencari menggunakan cara lain
Penyortiran
Menyortir leksikografis dari satu set kunci dapat dicapai dengan algoritma sederhana berbasis trie sebagai berikut:
     Masukkan semua kunci dalam sebuah trie. 

Output semua kunci dalam trie dengan cara pre-order traversal, yang menghasilkan output yang dalam rangka leksikografis meningkat. Pre-order traversal adalah semacam depth-first traversal. Di-order traversal jenis lain dari depth-first traversal yang lebih sesuai untuk keluaran nilai-nilai yang berada dalam pohon pencarian biner bukan sebuah trie.
Algoritma ini adalah bentuk semacam radix.
Trie Sebuah bentuk struktur data dasar Burstsort;. Saat ini (2007) tercepat diketahui, memori / cache berbasis, string algoritma sorting
Sebuah algoritma paralel untuk menyortir kunci N didasarkan pada mencoba adalah O (1) jika ada prosesor N dan panjang kunci memiliki bagian atas yang konstan terikat. Ada potensi bahwa kunci mungkin bertabrakan dengan memiliki prefiks umum atau dengan menjadi identik dengan satu sama lain, mengurangi atau menghilangkan keuntungan kecepatan memiliki beberapa prosesor yang beroperasi di paralel....
Mencoba Mengompresi
Ketika trie ini kebanyakan statis, yaitu semua insersi atau delesi kunci dari trie prefilled cacat dan pencarian hanya diperlukan, dan ketika node trie tidak mengetik dengan data tertentu node (atau jika data node umum) adalah mungkin untuk kompres representasi trie dengan menggabungkan cabang umum . Aplikasi ini biasanya digunakan untuk mengompresi tabel lookup ketika set kunci total sangat jarang disimpan dalam ruang representasi mereka.
Sebagai contoh mungkin digunakan untuk mewakili bitsets jarang (yaitu himpunan bagian dari satu set jauh lebih besar tetap enumerable) menggunakan trie mengetik dengan posisi sedikit elemen dalam set penuh, dengan kunci yang dibuat dari string bit yang diperlukan untuk menyandikan posisi terpisahkan setiap elemen. Trie kemudian akan memiliki sangat merosot formulir dengan banyak cabang yang hilang, dan kompresi menjadi mungkin dengan menyimpan node daun (mengatur segmen dengan panjang tetap) dan menggabungkan mereka setelah mendeteksi pengulangan pola umum atau dengan mengisi kesenjangan yang tidak terpakai.
Kompresi tersebut juga biasanya digunakan, dalam pelaksanaan berbagai tabel lookup cepat diperlukan untuk mengambil sifat karakter Unicode (misalnya untuk merepresentasikan tabel kasus pemetaan, atau tabel lookup yang berisi kombinasi karakter menggabungkan dasar dan diperlukan untuk mendukung Unicode normalisasi). Untuk aplikasi tersebut, representasi mirip dengan mengubah sebuah meja yang sangat besar jarang unidimensional ke matriks multidimensi, dan kemudian menggunakan koordinat di hiper-matriks sebagai kunci string dari trie terkompresi. Kompresi maka akan terdiri dari mendeteksi dan penggabungan kolom umum dalam hiper-matriks untuk memampatkan dimensi terakhir dalam kunci; setiap dimensi dari toko hypermatrix posisi awal dalam vektor penyimpanan dimensi berikutnya untuk setiap nilai koordinat, dan vektor yang dihasilkan sendiri kompresibel saat itu juga jarang, sehingga setiap dimensi (terkait ke tingkat lapisan dalam trie) dikompresi secara terpisah.
Beberapa implementasi tidak mendukung kompresi seperti data dalam mencoba jarang dinamis dan memungkinkan penyisipan dan penghapusan dalam kompresi mencoba, tetapi umumnya ini memiliki biaya yang signifikan ketika segmen dikompresi harus split atau digabung, dan beberapa tradeoff harus dibuat antara ukuran terkecil dari trie dikompresi dan kecepatan update, dengan membatasi kisaran pencarian global untuk membandingkan cabang umum dalam trie jarang.
Hasil kompresi seperti mungkin terlihat mirip dengan berusaha untuk mengubah trie ke dalam grafik asiklik diarahkan (DAG), karena sebaliknya berubah dari DAG untuk trie adalah jelas dan selalu mungkin, namun dibatasi oleh bentuk dari kunci yang dipilih untuk indeks node.
Pendekatan lain kompresi adalah untuk "mengungkap" struktur data ke dalam array byte tunggal . Pendekatan ini menghilangkan kebutuhan untuk pointer node yang mengurangi kebutuhan memori secara substansial dan membuat pemetaan memori mungkin yang memungkinkan manajer memori virtual untuk memuat data ke memori yang sangat efisien.
Pendekatan lain kompresi adalah "paket" trie . Liang menjelaskan implementasi ruang-efisien dari trie dikemas jarang diterapkan untuk hyphenation, di mana keturunan setiap node dapat disisipkan dalam memori.


Contoh Trie
1. ALGO
2. API
3. BOM
4. BOS
5. BOSAN
6. BOR
 
 Insertion in Trie

Untuk memasukkan kata ke trie, kita dapat menggunakan kode ini:


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);
}

Dan jika kita ingin memasukkan data, tetapi belum ada data(kosong), kita haruslah memesan memori terlebih dahulu, kita bisa menggunakan kode ini :
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;

Referensi :
http://en.wikipedia.org/wiki/Trie
http://www.informatika.org/

 



Tidak ada komentar:

Posting Komentar