Disusun oleh:
Ir. Rinaldi Munir, M.T.
pencarian
string
dirumuskan
sebagai
Diberikan:
1. teks (text), yaitu (long) string yang panjangnya n
karakter
2. pattern, yaitu string dengan panjang m karakter (m
< n) yang akan dicari di dalam teks.
Carilah (find atau locate) lokasi pertama di dalam teks
yang bersesuaian dengan pattern. Aplikasi dari
masalah pencocokan string antara lain pencarian suatu
kata di dalam dokumen (misalnya menu Find di dalam
Microsoft Word).
Contoh 10.1:
Pattern: hari
Teks:
kamipulangharikamis
target
Contoh 10.2:
Pattern: not
Teks:
nobodynoticedhim
target
Contoh 10.3:
Pattern: apa
Teks:
SiapayangmenjemputPapa
darikotaBalikpapan?
10.1 Algoritma Brute Force
Dengan sumsi bahwa teks berada di dalam array T[1..n]
dan pattern berada di dalam array P[1..m], maka algoritma
brute force pencocokan string adalah sebagai berikut:
1. Mula-mula pattern P dicocokkan pada awal teks T.
2. Dengan bergerak dari kiri ke kanan, bandingkan setiap
setiap karakter di dalam pattern P dengan karakter
yang bersesuaian di dalam teks T sampai:
a. semua karakter yang dibandingkan cocok atau
sama (pencarian berhasil), atau
b. dijumpai sebuah ketidakcocokan karakter
(pencarian belum berhasil)
3. Bila pattern P belum ditemukan kecocokannya dan
teks T belum habis, geser pattern P satu karakter ke
kanan dan ulangi langkah 2.
Contoh 10.3:
Teks: nobodynoticedhim
Pattern: not
nobodynoticedhim
s=0not
s=1not
s=2not
s=3not
s=4not
s=5not
s=6not
s=7not
Contoh 10.4:
Teks: 10010101001011110101010001
Pattern: 001011
10010101001011110101010001
s=0001011
s=1001011
s=2001011
s=3001011
s=4001011
s=5001011
s=6001011
s=7001011
s=8001011
Pseudo-code algoritmanya:
procedure BruteForceSearch(input m, n : integer, input P : array[1..m]
of char,
input T : array[1..n] of char,
output idx : integer)
{ Mencari kecocokan pattern P di dalam teks T. Jika ditemukan P di
dalam T, lokasi
awal kecocokan disimpan di dalam peubah idx.
Masukan: pattern P yang panjangnya m dan teks T yang panjangnya n.
Teks T direpresentasika sebagai string (array of character)
Keluaran: posisi awal kecocokan (idx). Jika P tidak ditemukan, idx =
-1.
}
Deklarasi
s, j : integer
ketemu : boolean
Algoritma:
s0
ketemufalse
while (s n-m) and (not ketemu) do
j1
while (j m) and (P[j] = T[s+j]) do
jj+1
endwhile
{ j > m or P[j] T[s+j] }
if j = m then
{ kecocokan string ditemukan }
ketemutrue
else
ss+1
{ geser pattern satu karakter ke kanan teks }
endif
endfor
{ s > n m or ketemu }
if ketemu then
idxs+1 { catatan: jika indeks array dimulai dari 0, idx s }
else
idx-1
endif
Teks: bimbinganbelajarataubimbel
Pattern: bimbel
j=5
1 2 3 4 5 6 7 8 9
Teks: bimbinganbelajarataubimbel
Pattern:
bimbel
j=2
Definisi:
Misalkan A adalah alfabet dan x = x1x2xk , k N,
adalah string yang panjangnya k yang dibentuk dari
karakter-karakter di dalam alfabet A.
Awalan (prefix) dari x adalah upa-string (substring) u
dengan
u = x1x2xk 1 , k {1, 2, , k 1}
dengan kata lain, x diawali dengan u.
Akhiran (suffix) dari x adalah upa-string (substring)
u dengan
u = xk b xk b + 1 xk , k {1, 2, , k 1}
dengan kata lain, x diakhiri dengan v.
Pinggiran (border) dari x adalah upa-string r
sedemikian sehingga
r = x1x2xk 1 dan u = xk b xk b + 1 xk , k {1, 2,
, k 1}
dengan kata lain, pinggiran dari x adalah upa-string
yang keduanya awalan dan juga akhiran sebenarnya
dari x.
1 2 3 4 5 6
a b a b a a
0 0 1 2 3 1
Contoh:
Teks: abcabcabd
Pattern: abcabd
Mula-mula kita hitung fungsi pinggiran untuk pattern
tersebut:
j
1 2 3 4 5 6
P[j] a b c a b d
b(j) 0 0 0 1 2 0
Teks: abcabcabd
Pattern:
abcabd
j=3
Rinaldi Munir/IF2251 Strategi Algoritmik/Bahan Kuliah ke-15
while((j>0)and(P[j+1]T[i]))do
jb[j]
endwhile
ifP[j+1]=T[i]then
jj+1
endif
ifj=mthen
ketemutrue
else
ii+1
endif
endwhile
ifketemuthen
idxim+1 { catatan: jika indeks array dimulai dari 0, maka
idxim}
else
idx1
endif
10
11