4.3.1 Kompleksitas Algoritma Big θ
Tabel 4.1 Komplesitas Boyer-Moore PreBmBc
Code C
C. public class BoyerMoore {
private String pattern; C1
1 C1
private String text; C2
1 C2
private int foundedAt = 0; C2
1 C2
private long duration = 0; C2
1 C2
public BoyerMooreString pattern, String text { this.pattern = pattern;
C2 1
C2
this.text = text; }
C2 1
C2 public int getFoundedAt {
return foundedAt; }
C1 1
C1
public long getDuration { return duration;
} C1
1 C1
Code C
C.
private static void preBmBcchar[] x, int m, int bmBc[] {
C1 1
C1
int i; C3
1 C3
for i = 0; i bmBc.length; ++i C4
m C4m
bmBc[i] = m; C2
m C2m
for i = 0; i m - 1; ++i C4
m C4m
Universitas Sumatera Utara
bmBc[x[i]] = m - i - 1; }
C2 m
C2m
Tn = 6C1+3C2+C3+C4m+2C2m+C4m = 6C1+3C2+C3
݉ + C4+2C2+C4
݉
1
= ݉
+ ݉
1
= θm Tabel 4.1 adalah tabel kompleksitas algoritma Boyer-Moore , dimana proses pencarian
kompleksitasnya menggunakan bahasa Java, C sebagai konstanta, sebagai ukuran masukan, dan C. C kali adalah untuk mencari Theoritical Running Time Tn atau kompleksitas
waktu, sehingga dapat dijumlahkan hasil dari perkalian C kali , maka diperoleh hasil θm
untuk pembentukan bad character-nya.
Tabel 4.2 Kompleksitas Boyer-Moore Suffixes
Code C
C.
private static int[] suffixeschar[] x, int m {
C1 1
C1
int f=0, g, i; C3
1 C3
int suff[] = new int[m];
C2 1
C2 suff[m - 1] = m;
C2 m
C2m g = m - 1;
C2 m
C2m
for i = m - 2; i = 0; --i { C4
m C4m
if i g suff[i + m - 1 - f] i - g
C5
m
C5m
suff[i] = suff[i + m - 1 - f]; C2
m C2m
else { C6
m C6m
if i g C6
m C6m
g = i; C2
m C2m
Universitas Sumatera Utara
f = i; C2
m C2m
while g = 0 x[g] == x[g + m - 1 - f]
C7 m
C7m
--g; C8
m C8m
suff[i] = f - g; }
} C2
m C2m
return suff; }
C9 m
C9m
Tn = C1+C2+C3+2C2m+C4m+4C2m+C5m+2C6m+C7m+C8m+C9m
= C1+C2+C3 ݉
+ 2C2+C4+4C2+C5+2C6+C7+C8+C9 ݉
1
= ݉
+ ݉
1
= θm Tabel 4.2 adalah tabel kompleksitas algoritma Boyer-Moore , dimana proses pencarian
kompleksitasnya menggunakan bahasa Java, C sebagai konstanta, sebagai ukuran masukan, dan C. C kali adalah untuk mencari Theoritical Running Time Tn atau kompleksitas
waktu, sehingga dapat dijumlahkan hasil dari perkalian C kali , maka diperoleh hasil θm
untuk pembentukan suffixes-nya.
Tabel 4.3 Kompleksitas Boyer-Moore BmGs
Code C
C.
private static void preBmGschar[] x, int m {
C1 1
C1
int i, j; C3
1 C3
int suff[] = suffixesx, m;
C2 1
C2
for i = 0; i m; ++i C4
m C4m
bmGs[i] = m C2
m C2m
j = 0; C2
m
C2m
Universitas Sumatera Utara
for i = m - 1; i = 0; --i C4
m
C4m
if suff[i] == i + 1
C5 m
C5m
for j m - 1 - i; ++j C4
m C4m
if bmGs[j] == m
C5 m
C5m bmGs[j] = m - 1 - i;
C2 m
C2m
for i = 0; i = m - 2; ++i C4
m C4m
bmGs[m - 1 - suff[i]] = m - 1 - i; C2
m C2m
} static int[] bmGs;
static int[] bmBc; C3
m C3m
Tn = C1+C2+C3+C4m+4C2m+ C3m+3C4m+2C5m
= C1+C2+C3 ݉
+ C4+4C2+C3+3C4+2C5 ݉
1
= ݉
+ ݉
1
= θm Tabel 4.3 adalah tabel kompleksitas algoritma Boyer-Moore , dimana proses pencarian
kompleksitasnya menggunakan bahasa Java, C sebagai konstanta, sebagai ukuran masukan, dan C. C kali adalah untuk mencari Theoritical Running Time Tn atau kompleksitas
waktu, sehingga dapat dijumlahkan hasil dari perkalian C kali , maka diperoleh hasil θm
untuk pembentukan Good Suffix-nya
Tabel 4.4 Kompleksitas Boyer-Moore Check
Code C
C.
public boolean check2 { C1
1 C1
long startMillis = System.currentTimeMillis;
C2 1
C2
long endMillis = 0;
C2 1
C2
Universitas Sumatera Utara
boolean result = false; C2
1 C2
int n = text.length;
C2 1
C2
int m = pattern.length; C2
1
C2
char[] y = text.toCharArray; C2
1
C2
char[] x = pattern.toCharArray;
C2 1
C2
int i, j; C3
1 C3
bmGs = new int[m];
C2 1
C2
bmBc = new int[256];
C2 1
C2 preBmGsx, m;
C3 1
C3 preBmBcx, m, bmBc;
C3 1
C3 j = 0;
C2 1
C2
while j = n - m { C7
n C7n
for i = m - 1; i = 0 x[i] == y[i + j]; --i;
C4 mn
C4 mn
if i 0 { C5
n C5n
j += bmGs[0]; C10
n C10n
this.foundedAt = j-m; C2
n C2n
endMillis = System.currentTimeMillis;
C2 n
C2n
this.duration = endMillis - startMillis;
C2 n
C2n
result = true; }
C2 n
C2n
else j += java.lang.Math.maxbmGs[i],
bmBc[y[i + j]] - m + 1 + i; C10
n C10n
Universitas Sumatera Utara
} return result;
} }
C3 1
C3
Tn = C1+10C2+4C3+4C2n+C5n+C7n+2C10n+C4mn = C1+10C2+4C3
݉ + 4C2+C5+C7+2C10
݊
1
+C4mn =
݉ +
݊
1
+ m.n = θmn Tabel 4.4 adalah tabel kompleksitas algoritma Boyer-Moore , dimana proses pencarian
kompleksitasnya menggunakan bahasa Java, C sebagai konstanta, sebagai ukuran masukan, dan C. C kali adalah untuk mencari Theoritical Running Time Tn atau kompleksitas
waktu, sehingga dapat dijumlahkan hasil dari perkalian C kali , maka diperoleh hasil θmn.
Maka untuk θ keseluruhan algoritma Boyer-Moore adalah sebagai berikut : θmPreBmBc + θmSuffixes + θmnCheck = θmn. Maka, hasil kompleksitas algoritma
Boyer-Moore
adalah θmn.
Tabel 4.5 Kompleksitas Rabin-Karp
Code C
C. public class RabinKarp {
C1 1
C1 private int foundedAt = 0;
C2 1
C2 private String pattern;
C1 1
C1 private String text;
C1 1
C1 private long duration = 0;
C2 1
C2 public RabinKarpString pattern, String text
{ C1
1
C1
this.pattern = pattern; C2
1 C2
this.text = text; }
C2 1
C2 public int getFoundedAt {
C1 1
C1 return foundedAt;
} C3
1 C3
Universitas Sumatera Utara
public long getDuration { C1
1 C1
return duration; }
C3 1
C3 public boolean check
{ C1
1 C1
Long startMillis
= System.currentTimeMillis;
C2 1
C2
long endMillis = 0; C2
1 C2
boolean result = false; C2
1 C2
double patternHash = getHashpattern; C2
1 C2
int patternLength = pattern.length; C2
1 C2
int textLength = text.length; C2
1 C2
int startIndex = 0; C2
1 C2
int endIndex = patternLength; C2
1 C2
whileendIndex = textLength {
C3 mn C3mn
String matchText = text.substringstartIndex, endIndex;
C2 1
C2 double matchTextHash =
getHashmatchText; C2
1 C2
ifpatternHash == matchTextHash {
C4 m
C4m ifpattern.equalsmatchText{
C5 m
C5m this.foundedAt = startIndex;
C2 1
C2 endMillis =
System.currentTimeMillis; C2
1 C2
this.duration = endMillis - startMillis;
C2 1
C2 result = true;
break; }
} C2
1 C2
startIndex += patternLength; C6
m C6m
endIndex += patternLength; C6
m C6m
} return result;
C7 m
C7
Universitas Sumatera Utara
} Tn = 7C1+19C2+2C3+C3mn+C4m+C5m+C6m+C7m
= 7C1+19C2+2C3+C7 ݉
+C4+C5+C6+C7 ݉
1
+C3mn =
݉ +
݉
1
+ m.n = θmn Tabel 4.5 adalah tabel kompleksitas algoritma Rabin-Karp , dimana proses pencarian
kompleksitasnya menggunakan bahasa Java, C sebagai konstanta, sebagai ukuran masukan, dan C. C kali adalah untuk mencari Theoritical Running Time Tn atau kompleksitas
waktu, sehingga dapat dijumlahkan hasil dari perkalian C kali , maka diperoleh hasil θmn.
Tabel 4.6 Kompleksitas Rabin-Karp a
Code C
C. public double getHashString text
{ C1
1 C1
double hashValue = 0; C2
1 C2
int base = 5; C2
1 C2
forlong i = 0; i text.length; i++ C8
n C8n
{ char character = text.charAtint i;
C2 n
C2n int ascii = int character;
C2 n
C2n int exponent = int text.length-1-
i; C2
n C2n
double pow = Math.powbase, exponent; C2
n C2n
double hash = ascii pow; C2
n C2n
hashValue += hash; }
C6 n
C6n
return hashValue; }
} C7
n C7n
Universitas Sumatera Utara
Tn = C1+2C2+5C2n+C6n+C7n+C8n = C1+2C2
݉ +5C2+C6+C7+C8
݊
1
= ݉
+ n = θm+n =
θmn+ θm+n = θmn Tabel 4.6 adalah tabel kompleksitas algoritma Rabin-Karp , dimana proses pencarian
kompleksitas nya menggunakan bahasa Java, C sebagai konstanta, sebagai ukuran masukan, dan C. C kali adalah untuk mencari Theoritical Running Time Tn atau kompleksitas
waktu, sehingga dapat dijumlahkan hasil dari perkalian C kali . Maka, diperoleh hasil θmn.
Maka untuk θ keseluruhan algoritma Boyer-Moore adalah sebagai berikut : θmnRabin-Karp + θmnRabin-Karpa = θmn. Maka, hasil kompleksitas algoritma
Rabin-Karp adalah θmn.
Maka kompleksitas algoritma Boyer-Moore dan kompleksitas algoritma Rabin-Karp bernilai sama, yaitu : θmn.
4.3.2 Real-Running-Time Tabel 4.7 Running-Time Boyer-Moore