Kompleksitas Algoritma Big θ Hasil Pengujian

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