Algoritma Rabin-Karp


Algoritma Rabin-Karp adalah salah satu algoritma yang dapat digunakan untuk mencari dimana sebuah string (dalam kasus ini dinamakan sebagai pola) apakah ditemukan di dalam kumpulan string lain dengan ukuran yang lebih besar. Contoh yang dibahas kali ini adalah mengenai pencarian kata dari sebuah input teks.
Untuk mempercepat pencarian pola dalam kalimat, Rabin-Karp menggunakan teknik fungsi hash. Fungsi ini mengubah setiap string menjadi angka, yang dinamakan nilai hash. Apabila 2 string adalah sama persis, maka nilai hashnya juga akan sama, sehingga pencarian string dapat diturunkan dengan cara menghitung nilai hash dari pola, dan kemudian melakukan pencarian pola dengan nilai hash yang sama pada data input.


Langkah-langkah penggunaan algoritma ini adalah

1. Tentukan teks yang digunakan sebagai input
Diasumsikan data input adalah sebagai berikut:
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

2. Tentukan pola kata kunci yang digunakan dalam pencarian
Diasumsikan pola adalah sebagai berikut
labor

3. Lakukan pencarian kata kunci menggunakan algoritma ini

Dim idxKata() As Integer = CariPola(input, pola)

* Gunakan fungsi ini untuk mencari pola pada data input

Public Function CariPola(input As String, pola As String) As Integer()
	Dim hasil As New List(Of Integer)()
	Dim sigInput As ULong = 0
	Dim sigPola As ULong = 0
	Dim Q As ULong = 100007
	Dim D As ULong = 256

	For i As Integer = 0 To pola.Length - 1
		sigInput = (sigInput * D + CULng(AscW(input(i)))) Mod Q
		sigPola = (sigPola * D + CULng(AscW(pola(i)))) Mod Q
	Next

	If sigInput = sigPola Then
		hasil.Add(0)
	End If

	Dim pow As ULong = 1

	For k As Integer = 1 To pola.Length - 1
		pow = (pow * D) Mod Q
	Next

	For j As Integer = 1 To input.Length - pola.Length
		sigInput = (sigInput + Q - pow * CULng(AscW(input(j - 1))) Mod Q) Mod Q
		sigInput = (sigInput * D + CULng(AscW(input(j + pola.Length - 1)))) Mod Q

		If sigInput = sigPola Then
			If input.Substring(j, pola.Length) = pola Then
				hasil.Add(j)
			End If
		End If
	Next

	Return hasil.ToArray()
End Function


Hasil akhir adalah: (klik untuk perbesar gambar)

cmd134


Contoh modul / source code dalam bahasa VB (Visual Basic) dapat didownload disini:



Jika membutuhkan jasa kami dalam pembuatan program, keterangan selanjutnya dapat dilihat di Fasilitas dan Harga
Jika ada yang kurang paham dengan langkah-langkah algoritma diatas, silahkan berikan komentar Anda.
Selamat mencoba.

Tinggalkan sebuah komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *