Space-tme radeof adalah cara unuk menyelesaikan suau masalah aau kalkulasi dengan waku yang lebih cepa eapi menggunakan lebih banyak memori(sorage space) aau waku yang lebih lama eapi menggukanan sediki memori(sorage memori(sorage space). Esiensi waku dan esiensi memori adalah dua hal yang berlawanan. Semakin sediki waku yang dibuuhkan maka akan semakin banyak memori yang dibuuhkan, begiu pula sebaliknya sebaliknya semakin banyak waku yang dibuuhkan maka semakin banyak pula memori yang dibuuhkan.
Sortng by ountng Counting Sort adalah algoritma pengurutan efektif dan efisien yang melakukan pengurutan dengan ide dasar meletakkan elemen pada posisi yang benar, dimana penghitungan posisi yang benar dilakukan dengan cara menghitung (counting) elemen-elemen dengan nilai lebih kecil atau sama dengan elemen tersebut. Contoh sederhana saja jika terdapat 12 elemen yang lebih kecil daripada x, maka x akan mendapatkan posisinya di posisi 1.
Keungggulan Algoritma Counting Sort !eunggulan dari algoritma counting sort adalah dapat mengurutkan dengan "aktu yang lebih singkat, karena tidak membandingkan dengan elemen lain. Kelemahan Algoritma Counting Sort !elemahan algoritma counting sort adalah menggunakan array yang terlalu banyak.
#ource code
// C Program for counting sort #include #include #define RANGE 255
//ungsi main !ang diurut"an dieri"an string arr$% dengan urutan al&haet 'oid count(ort)char arr$%* + // ,he out&ut character arra! that -ill ha'e sorted arr char out&ut$strlen)arr*% out&ut$strl en)arr*%
// Create a count arra! to store count of inidi'idul // characters and initialie count arra! as 0 int count$RANGE 1 %3 i memset)count3 memset)count 3 03 sieof)count** sieof)count **
// (tore count of each character
for)i 4 0 arr$i% 11i*
11count$arr$i%%
// Change count$i% so that count$i% no- contains actual // &osition of this character in out&ut arra! for )i 4 i <4 RANGE 11i* count$i% 14 count$i%
// 6uild the out&ut character arra! for )i 4 0 arr$i% 11i* + out&ut$count$arr$i%%% 4 arr$i%
count$arr$i%% 7
// Co&! the out&ut arra! to arr3 so that arr no// contains sorted characters for )i 4 0 arr$i% 11i* arr$i% 4 out&ut$i% 7
// 8ri'er &rogram to test ao'e function int main)* + char arr$% 4 9gee"sforgee"s9//9a&&le&&9
count(ort)arr*
&rintf)9(orted character arra! is :sn93 arr* return 0 7
Sar
!lowchar
#npu kaa geeks$orgeeks
*ua coun array unuk menyimpan daa
%enyimpan nilai dari setap karaker
"araker diurukan sesuai nilai alphabe
&upu kaa men'adi eeee$ggkkors
E
Input
Enhancement
in
String
Matching:
Horspool’s and Boyer-Moore Algorithm
Pada bagian ini, kita melihat bagaimana teknik input enhancement dapat diterapkan pada masalah matching string. Ingat bahwa masalah pencocokan string memerlukan pencarian terjadinya string karakter m yang disebut pola dalam string karakter n yang lebih panjang yang disebut teks. Karena jumlah maksimum uji coba tersebut adalah n - m + 1 dan, dalam kasus terburuk, perbandingan yang perlu dilakukan pada masing - masing, efisiensi kasus terburuk dari algoritma brute force adalah kelas !nm" . #ata-rata, bagaimanapun, kita harus mengharapkan hanya beberapa perbandingan sebelum pergeseran pola, dan untuk teks bahasa alami acak, efisiensi kasus rata-rata memang ternyata berada di !n + m". $eberapa algoritma yang lebih cepat telah ditemukan. Kebanyakan dari mereka memanfaatkan gagasan peningkatan input% preprocess pola untuk mendapatkan beberapa informasi tentang hal itu, menyimpan informasi ini dalam sebuah tabel, dan kemudian menggunakan informasi ini selama pencarian pola yang sebenarnya dalam teks tertentu. Inilah ide di balik dua algoritma yang paling dikenal dari tipe ini% algoritma Knuth-&orris-Pratt 'Knu(() dan algoritma $oyer-&oore '$oy((). Perbedaan utama antara kedua algoritma ini terletak pada cara mereka membandingkan karakter dari sebuah pola dengan rekan mereka dalam sebuah t eks% algoritma Knuth-&orrisPratt melakukannya dari kiri ke kanan, sedangkan algoritma $oyer-&oore melakukannya dari kanan ke kiri. Karena gagasan terakhir mengarah ke algoritma yang lebih sederhana, inilah satu-satunya yang akan kita kejar di sini. !Perhatikan bahwa algoritma $oyer-&oore dimulai dengan menyelaraskan pola terhadap karakter awal teks* jika percobaan pertama gagal, itu menggeser pola ke kanan. Ini adalah perbandingan dalam percobaan yang dilakukan algoritma kanan ke kiri, mulai dengan karakter terakhir dalam pola." &eskipun ide dasar algoritma $oyer-&oore sederhana, penerapan sebenarnya dalam metode kerja kurang begitu. leh karena itu, kita memulai diskusi kita dengan ersi sederhana dari algoritma $oyer-&oore yang disarankan oleh #. orspool 'or). /elain menjadi lebih sederhana, algoritma orspool tidak selalu kurang efisien dibandingkan algoritma $oyer-&oore pada string acak.
Horspool’s Algorithm Pertimbangkan, sebagai contoh, mencari pola $0#$# dalam beberapa teks%
2imulai dengan # terakhir dari pola dan bergerak dari kanan ke kiri, kita membandingkan pasangan karakter yang sesuai dalam pola dan teksnya. 3ika semua karakter pola cocok, substring yang cocok ditemukan. Kemudian pencarian bisa dihentikan sama sekali atau dilanjutkan jika terjadi kemunculan pola yang sama.
3ika terjadi ketidakcocokan, kita perlu menggeser pola ke kanan. 3elas, kami ingin melakukan perubahan besar mungkin tanpa mempertaruhkan kemungkinan kehilangan substring yang sesuai dalam teks. 0lgoritma orspool menentukan ukuran pergeseran seperti itu dengan melihat karakter c dari teks yang sesuai dengan karakter terakhir dari pola. Ini adalah kasus bahkan jika karakter c sendiri sesuai dengan mitranya dalam pola.
Boyer-Moore Algorithm /ekarang kita garis bawahi algoritma $oyer-&oore itu sendiri. 3ika perbandingan pertama dari karakter paling kanan dalam pola dengan karakter c yang sesuai di dalam teks gagal, algoritma melakukan hal yang persis sama dengan algoritma orspool. 4akni, menggeser pola ke kanan dengan jumlah karakter yang diambil dari tabel precomputed seperti yang dijelaskan sebelumnya.
Kedua algoritma tersebut bertindak secara berbeda, namun setelah beberapa bilangan positif k ! 5k 5m" dari karakter pola dicocokkan dengan sukses sebelum terjadi ketidaksesuaian%
2alam situasi ini, algoritma $oyer-&oore menentukan ukuran pergeseran dengan mempertimbangkan dua kuantitas. 4ang pertama dipandu oleh karakter teks c yang menyebabkan ketidakcocokan dengan mitranya dalam pola. 2engan demikian, ini disebut pergeseran simbol buruk. 0lasan di balik pergeseran ini adalah alasan yang kami gunakan dalam algoritma orspool. 3ika c tidak sesuai dengan pola, kita ubah pola untuk hanya melewatkan huruf c ini di teks. 2engan mudah, ukuran pergeseran ini dapat dihitung dengan rumus t1 !c" - k dimana t1 !c" adalah entri pada tabel precomputed yang digunakan oleh algoritma orspool !lihat di atas" dan k adalah jumlah karakter yang cocok%
B Tree $ 6 tree adalah sebuah tree yang dapat menyimpan data secara berurutan dan memungkinkan untuk pencarian, akses sekuensial, penambahan, serta penghapusan dalam waktu yang relatif singkat. $ 6 tree adalah generalisasi dari binary search tree, di mana setiap node dapat memiliki lebih dari 7 chlidren. 8idak seperti self – balancing binary search trees, $ 6 tree lebih dikhususkan untuk sistem yang membutuhkan pembacaan dan penulisan data dalam jumlah yang relatif besar 9 banyak. $ 6 tree biasadigunakan untuk database dan filesystem. 2alam $ 6 tree, internal nodes !non - leaf" dapat memiliki ariabel jumlah node anak dalam batas yang sudah ditentukan. Ketika sebuah data ditambahkan atau dihapus dari sebuah node, jumlah node anak dari tree tersebut berubah. 2engan tujuan untuk mempertahankan batas yang sudah ditentukan tersebut, internal nodes dapat bergabung atau berpisah. Karena berbagai batas dari node 6 node anak diijinkan, maka $ 6 tree tidak perlu menyeimbangkan diri sesering mungkin layaknya self – balancing search trees,tetapi hal semacam ini akan membuang 6 buang tempat yang ada, karena setiap node yang ada tidak terisi semua. $atas bawah dan batas atas pada jumlah node anak biasanya tetap untuk implementasi tertentu. /ebagai contoh, pada 7 6 : tree, setiap internal node hanya dapat memiliki 7 atau : node 6 node anak. 3umlah cabang !anak node" dari sebuah node akan satu lebih banyak dari jumlah kunci yang tersimpan dalam node. 2alam sebuah 7-: $ 6 tree, node internal akan menyimpan baik satu kunci !dengan 7 buah node anak" atau dua kunci !dengan tiga node anak". /ebuah $- tree kadang 6 kadang digambarkan dengan parameter (d + 1) – (2d + 1) atau yang lebih mudah dengan urutan cabang tertinggi, (2d + 1). /ebuah $ 6 tree akan tetap seimbang dengan syarat semua node 6 node daun !node terluar" berada dalam kedalaman yang sama. Kedalaman ini akan bertambah secara perlahan 6 lahan sebagai satu syarat yang ditambahkan pada sebuah tree, tetapi pertambahan pada keseluruhan kedalaman jarang terjadi, dan sebagai hasilnya pada semua node - node daun menjadi satu node lebih jauh dari root 6 nya. $ 6 tree memiliki keuntungan substansial atas implementasi alternatif ketika waktu untuk mengakses sebuah node menjadi jauh melebihi waktu akses antara sesama node. al ini biasanya terjadi ketika node 6 node tersebut berada pada penyimpanan sekunder seperti diks dries. 2engan memaksimalkan jumlah dari anak 6 anak node dari setiap node
6 node internal, ketinggian tree tersebut akan berkurang dan jumlah akses node yang mahal !lama" akan berkurang. Searching /earching dalam $ 6 tree mirip dengan searching dalam binary search tree. 2imulai dari root, tree akan dilaluli secara rekursif dari atas sampai bawah !root sampai node terluar".
2alam
setiap
leel, search memilih
sebuah child
pointer !subtree"
yang
memisahkan nilai 6 nilai pada kedua sisi dari nilai pencarian. Binary search biasanya !tapi tidak selalu" digunakan dalam setiap node untuk menemukan nilai 6 nilai pemisahan dan nilai penting dari child tree. nsertion /etiap penambahan dimulai dari sebuah node daun !node terluar". ;ntuk menambahkan sebuah elemen !data" baru. Pencarian dilakukan pada tree untuk menemukan node terluar di mana elemen baru !data" harus ditambahkan. 8ambahkan data baru tersebut ke dalam node dengan langkah 6 langkah berikut % 1. 3ika node berisi lebih sedikit dari jumlah elemen !data" maksimum yang sudah ditentukan, maka terdapat ruangan untuk elemen yang baru !data baru". 8ambahkan elemen baru tersebut ke dalam node, jaga data 6 data dalam node tetap teratur. 7. 3ika node 6 node sudah penuh, sehingga terbagi rata menjadi 7 node,
/ebuah median tunggal dipilih dari antara unsur 6 unsur daun dan elemen baru.
8ambahkan
nilai
pemisah
pada
node
parent,
yang
akan
menyebabkan node tersebut akan memisah, dan seterusnya. 3ika
node tidak memiliki parent !yaitu jika node adalah root", buat root baru di atas node tersebut !menambahkan tinggi dari tree tersebut".
!eletion 0da 7 cara mengenai penghapusan dari sebuah $ 6 tree,
8emukan dan hapus data itu, kemudian atur ulang tree untuk mengembalikan keseimbangannya atau
=akukan single pass pada tree tersebut, tetapi sebelum masuk pada sebuah node, atur ulang tree sehingga setelah data yang akan dihapus ditemukan. 2ata tersebut dapat dihapus tanpa memicu terjadinya atur ulang kembali.
pen ashing and >losed ashing Penggunaan "tertutup" vs. "terbuka" mencerminkan dengan atau tidaknya kita menggunakan posisi atau struktur data tertentu. Misalnya, "terbuka" dalam "pengalamatan terbuka" memberi tahu kita indeks (alias alamat) di mana objek akan disimpan dalam tabel hash tidak sepenuhnya ditentukan oleh kode hashnya. Sebaliknya, indeks dapat bervariasi tergantung pada apa yang sudah ada dalam tabel hash. The "closed" dalam "closed hashing" mengacu pada akta bah!a kita tidak pernah meninggalkan tabel hash setiap objek disimpan secara langsung pada sebuah indeks dalam array internal tabel hash. Perhatikan bah!a ini hanya mungkin dengan menggunakan semacam strategi pengalamatan terbuka. #ni menjelaskan mengapa "closed hashing" dan "open addressing" adalah sinonim. $andingkan ini dengan open hashing % dalam strategi ini, tidak ada objek yang benar% benar tersimpan dalam array tabel hash Sebagai gantinya, satu objek adalah hashed, disimpan dalam datar yang terpisah dari array internal tabel hash. "terbuka" mengacu pada kebebasan yang kita dapatkan dengan meninggalkan tabel hash, dan menggunakan datar terpisah. &mong%omong, "datar terpisah" mengisyaratkan mengapa hashing terbuka juga dikenal sebagai "chaining terpisah". Singkatnya, "tertutup" selalu mengacu pada semacam jaminan ketat, seperti saat kita menjamin bah!a benda selalu tersimpan langsung di dalam tabel hash (closed hashing). 'emudian, kebalikan dari "closed" adalah "open", jadi jika nda tidak memiliki jaminan seperti itu, strategi tersebut dianggap "terbuka".
http%99www.brainkart.com9article9Input-nhancement-in-/tring-&atching--orspool---s-and$oyer-&oore-0lgorithm?:9 http%99greeks-btree.blogspot.co.id9