Implementasi Algoritma Levenshtein Distance dan Algoritma Knuts Morris Pratt Dalam Fitur Word Complete pada Search Engine

  LISTING PROGRAM Imports MySql.Data.MySqlClient Imports MySql.Data Imports System.Collections Imports System.Array Public Class frmUtama Dim arrSearch() As String Dim arrArti() As String = {} Dim arrArtiBtk() As String = {} Dim batasSunda As Integer = 0 Dim batasBatak As Integer = 0 Dim batasPerpus As Integer = 0 Dim indo() As String = {} Dim indoLD() As String Dim tempStr As String = Nothing Dim tempStrLD As String = Nothing Dim clicked As Integer = Nothing Dim clickedLD As Integer = Nothing Public Property MdiParent As Form Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Panel3.Parent = Me Panel3.BackColor = Color.FromArgb(55, Color.White) Panel1.BackColor = Color.FromArgb(0, Color.DeepSkyBlue) 'Panel2.BackColor = Color.FromArgb(0, Color.Aqua) Panel4.BackColor = Color.FromArgb(55, Color.White) Panel5.BackColor = Color.FromArgb(0, Color.Black) RectangleShape1.FillColor = Color.FromArgb(55, Color.White) RectangleShape1.BorderColor = Color.FromArgb(55, Color.White) 'txtCari.BackColor = Color.FromArgb(55, Color.White) ' ListView3.Visible = False Panel5.Top = Panel5.Top + 100 lblCaption.Top = Panel5.Top - 35 Me.Panel3.Anchor = AnchorStyles.Top Me.Panel1.Anchor = AnchorStyles.Top Me.txtCari.Anchor = AnchorStyles.Top Me.RectangleShape1.Anchor = AnchorStyles.Top Me.RectangleShape2.Anchor = AnchorStyles.Top ' Me.Panel2.Anchor = AnchorStyles.Top Me.Panel4.Anchor = AnchorStyles.Top

  Me.Panel5.Anchor = AnchorStyles.Top Me.lblCaption.Anchor = AnchorStyles.Top 'ckInstan.Parent = PictureBox1 'Panel4.Parent = PictureBox1 lblInfoKMP.Parent = Panel4 lblInfoLD.Parent = Panel4 ' Panel4.BackColor = Color.FromArgb(55, Color.White) Dim kotak As New TextBox 'kotak.Parent = Panel5 Try ' On Error Resume Next Dim sMySQLConn = "server=localhost;user id=root;password='';database=skripsiryan" Dim oMySQLConn As New MySqlConnection(sMySQLConn) oMySQLConn.Open() Dim oMySQLDa As New MySqlDataAdapter Dim tPerpusDA As New MySqlDataAdapter Dim oTbl As New DataTable Dim oMySQLCmd As New MySqlCommand("select * from tb_sunda", oMySQLConn) oMySQLDa.SelectCommand = oMySQLCmd Dim oDr As MySqlDataReader oDr = oMySQLCmd.ExecuteReader oTbl.Load(oDr) 'Dim pDr As MySqlDataReader 'pDr = tMySQLcmd.ExecuteReader 'tPerpus.Load(pDr) ''LOAD DATABASE PERPUSTAKAAN 'For x As Integer = 0 To Val(tPerpus.Rows.Count) - 1 ' arrPerpustakaan(x) = tPerpus.Rows(x)("keyword") 'Next ReDim arrKata(oTbl.Rows.Count - 1) ReDim arrArti(oTbl.Rows.Count - 1) Dim dictkata2 As Hashtable = New Hashtable

  For indeks As Integer = 0 To Val(oTbl.Rows.Count) - 1 arrKata(indeks) = oTbl.Rows(indeks)("sunda") arrArti(indeks) = oTbl.Rows(indeks)("indonesia") Next indeks ' MsgBox(arrArti(0).ToString) ListView1.View = View.Details ListView1.Cursor = Cursors.Hand ListView1.View = View.Details ListView1.HeaderStyle = ColumnHeaderStyle.None ListView2.View = View.Details ListView2.Cursor = Cursors.Hand ListView2.View = View.Details ListView2.HeaderStyle = ColumnHeaderStyle.None Catch ex As Exception MsgBox("Database belum terhubung, aktifkan MySQL terlebih dahulu", vbCritical, "Database tidak terhubung") Close() End Try batasSunda = arrKata.Length Load_databaseBTK() batasBatak = arrKata.Length load_databasePerpus() batasPerpus = arrKata.Length End Sub Private Sub q_GotFocus(sender As Object, e As EventArgs) ' RectangleShape1.BorderColor = Color.DodgerBlue End Sub Private Sub txtCari_KeyDown(sender As Object, e As KeyEventArgs) If e.KeyCode = Keys.Enter Then ckInstan.Checked = True ElseIf e.KeyCode = Keys.Down Then ListView1.Focus() End If End Sub Private Sub txtCari_KeyPress(sender As Object, e As KeyPressEventArgs)

  End Sub Private Sub q_LostFocus(sender As Object, e As EventArgs) ' RectangleShape1.BorderColor = Color.Black End Sub Private Sub q_TextChanged(sender As Object, e As EventArgs) Timer1.Stop() Timer1.Start() End Sub Private Sub btnWS_Click(sender As Object, e As EventArgs) Dim WS As String = InputBox("input", "Masukkan saran kata") txtCari.Text = WS End Sub Private Sub btnTK_Click(sender As Object, e As EventArgs) Dim WS As String = InputBox("Tambah Kata", "Tambah Kata") txtCari.Text = WS End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) frmTentang.Show() End Sub Private Sub Button4_Click(sender As Object, e As EventArgs) frmBantuan.Show() End Sub Private Sub ListView1_Click(sender As Object, e As EventArgs) txtCari.Text = ListView1.Items(ListView1.FocusedItem.Index).SubItems(0). Text End Sub Private Sub ListView1_KeyDown(sender As Object, e As KeyEventArgs)

  If e.KeyCode = Keys.Up Then If ListView1.FocusedItem.Index = 0 Then txtCari.Focus() End If ElseIf e.KeyCode = Keys.Right Then ListView2.Focus() End If End Sub Private Sub ListView2_Click(sender As Object, e As EventArgs) txtCari.Text = ListView2.Items(ListView2.FocusedItem.Index).SubItems(0). Text End Sub Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick ReDim HasilPencarianLD(0) ReDim hasilpencarianKMP(0) If ckInstan.Checked = True Then If txtCari.TextLength <> 0 Then Panel5.Top = 198 lblCaption.Visible = False Timer1.Stop() lblInfoKMP.Visible = True Panel4.Visible = True ListView1.Items.Clear() ListView2.Items.Clear() LD() KMP() ' ListView3.Visible = True Else Panel4.Visible = False If Panel4.Visible = False Then Panel5.Top = 298 lblCaption.Visible = True 'ListView3.Visible = False End If End If End If End Sub Private Sub Button1_Click_2(sender As Object, e As EventArgs) End Sub

  Private Sub btnKMP_Click(sender As Object, e As EventArgs) ckInstan.Checked = False If Len(txtCari.Text) > 0 Then cariText = txtCari.Text KMP() Algo = False frmHasil.Show() Else MsgBox("Isi keyword pencarian terlebih dahulu") End If End Sub Sub Load_databaseBTK() Try ' On Error Resume Next Dim sMySQLConn = "server=localhost;user id=root;password='';database=skripsiryan" Dim oMySQLConn As New MySqlConnection(sMySQLConn) oMySQLConn.Open() Dim oMySQLDa As New MySqlDataAdapter Dim tPerpusDA As New MySqlDataAdapter Dim oTbl As New DataTable Dim oMySQLCmd As New MySqlCommand("select * from batak", oMySQLConn) oMySQLDa.SelectCommand = oMySQLCmd Dim oDr As MySqlDataReader oDr = oMySQLCmd.ExecuteReader oTbl.Load(oDr) Dim gb As Integer = arrKata.Length For indeks As Integer = 0 To Val(oTbl.Rows.Count) - 1 ReDim Preserve arrBatak(indeks) arrBatak(indeks) = oTbl.Rows(indeks)("batak") ReDim Preserve arrArtiBtk(indeks) arrArtiBtk(indeks) = oTbl.Rows(indeks)("indonesia") Next indeks ' MsgBox(arrArti(0).ToString) ListView1.View = View.Details ListView1.Cursor = Cursors.Hand ListView1.View = View.Details ListView1.HeaderStyle = ColumnHeaderStyle.None

  ListView2.View = View.Details ListView2.Cursor = Cursors.Hand ListView2.View = View.Details ListView2.HeaderStyle = ColumnHeaderStyle.None Catch ex As Exception MsgBox("Database belum terhubung, aktifkan MySQL terlebih dahulu", vbCritical, "Database tidak terhubung") Close() End Try Dim gbg As Integer = arrKata.Length For x As Integer = 0 To arrBatak.Length - 1 ReDim Preserve arrKata(gbg + x) arrKata(gbg + x) = arrBatak(x) ReDim Preserve arrArti(gbg + x) arrArti(gbg + x) = arrArtiBtk(x) Next ' MsgBox(arrArti(0).ToString) End Sub Sub load_databasePerpus() Dim arrPerpus() As String = {} Dim arrArtiPerpus() As String = {} Try ' On Error Resume Next Dim sMySQLConn = "server=localhost;user id=root;password='';database=skripsiryan" Dim oMySQLConn As New MySqlConnection(sMySQLConn) oMySQLConn.Open() Dim oMySQLDa As New MySqlDataAdapter Dim tPerpusDA As New MySqlDataAdapter Dim oTbl As New DataTable Dim oMySQLCmd As New MySqlCommand("select * from perpustakaan", oMySQLConn) oMySQLDa.SelectCommand = oMySQLCmd Dim oDr As MySqlDataReader oDr = oMySQLCmd.ExecuteReader oTbl.Load(oDr) Dim gb As Integer = arrKata.Length For indeks As Integer = 0 To Val(oTbl.Rows.Count) - 1 ReDim Preserve arrPerpus(indeks) arrPerpus(indeks) = oTbl.Rows(indeks)("keyword") Next indeks ' MsgBox(arrArti(0).ToString) ListView1.View = View.Details ListView1.Cursor = Cursors.Hand ListView1.View = View.Details ListView1.HeaderStyle = ColumnHeaderStyle.None ListView2.View = View.Details ListView2.Cursor = Cursors.Hand ListView2.View = View.Details ListView2.HeaderStyle = ColumnHeaderStyle.None Catch ex As Exception MsgBox("Database belum terhubung, aktifkan MySQL terlebih dahulu", vbCritical, "Database tidak terhubung") Close() End Try Dim gbg As Integer = arrKata.Length For x As Integer = 0 To arrPerpus.Length - 1 ReDim Preserve arrKata(gbg + x) arrKata(gbg + x) = arrPerpus(x) ReDim Preserve arrArti(gbg + x) arrArti(gbg + x) = "Istilah Perpustakaan" Next ' MsgBox(arrArti(0).ToString) End Sub Sub LD() On Error Resume Next Dim run_time As Stopwatch = Stopwatch.StartNew() Dim indeks2 As Integer indeks2 = 0 run_time.Start() 'Pengecekan database yang digunakan.

  For indeks As Integer = 0 To arrKata.Length - 1 Dim distance As Integer = LevenshteinDistance(txtCari.Text, arrKata(indeks)) Dim words As String = arrKata(indeks) Dim ind As String = arrArti(indeks) If (distance <= (txtCari.Text.Length - 1) / 2) Then 'Untuk mempersempit hasil pencarian, nilai distance terseleksi berdasarkan rasio panjang teks dibagi

  2 ReDim Preserve arrDistance(indeks2) 'Deklarasi ulang array Distance tanpa kehilangan nilai sebelumnya, berguna untuk memperkecil ukuran array Distance sehingga lebih hemat memory arrDistance(indeks2) = distance ReDim Preserve HasilPencarianLD(indeks2) HasilPencarianLD(indeks2) = words ReDim Preserve indoLD(indeks2) indoLD(indeks2) = ind indeks2 += 1 End If Next Dim i, j, y As Integer Dim z, q As String 'Pengurutan array kata 2 berdasarkan distance If (HasilPencarianLD(0) = Nothing AndAlso HasilPencarianLD.Count <= 0) Then 'Jika item dalam array kata 2 tidak kosong Array.Clear(HasilPencarianLD, 0, HasilPencarianLD.Length) ListView1.Items.Add("Kata Tidak ditemukan").ForeColor = Color.Red Else For i = 0 To HasilPencarianLD.Length - 1 For j = i + 1 To HasilPencarianLD.Length

  • 1 If arrDistance(i) > arrDistance(j) Then y = arrDistance(i) z = HasilPencarianLD(i) q = indoLD(i) arrDistance(i) = arrDistance(j) indoLD(i) = indoLD(j) HasilPencarianLD(i) = HasilPencarianLD(j) arrDistance(j) = y HasilPencarianLD(j) = z

  indoLD(j) = q End If Next j Next i run_time.Stop() run_timeLD = run_time.Elapsed.TotalSeconds Dim batas As Integer batas = 0 If HasilPencarianLD.Length >= 20 Then batas = 20 ElseIf HasilPencarianLD.Length >= 10 Then batas = 10 ElseIf HasilPencarianLD.Length < 5 Then batas = HasilPencarianLD.Length - 1 End If If ckInstan.Checked = True Then ListView1.Visible = True Panel2.Visible = True ListView1.Items.Clear() For x As Integer = 0 To batas With ListView1.Items.Add(HasilPencarianLD(x), 0) .SubItems.Add(0) End With If ((IndexOf(arrKata, HasilPencarianLD(x))) <= batasSunda) Then ListView1.Items(x).SubItems(0).BackColor = Color.LightBlue ElseIf ((IndexOf(arrKata, HasilPencarianLD(x))) <= batasBatak) Then ListView1.Items(x).SubItems(0).BackColor = Color.Coral Else ListView1.Items(x).SubItems(0).BackColor = Color.LightPink End If Next x lblInfoLD.Visible = True If HasilPencarianLD(0) = Nothing Then lblInfoLD.Text = "0 Hasil" & " dalam " & run_timeLD & " Detik" Else lblInfoLD.Text = HasilPencarianLD.Length & " Hasil" & " dalam " & run_timeLD & " Detik" End If Array.Clear(HasilPencarianLD, 0, HasilPencarianLD.Length) End If End If End Sub Sub KMP() On Error Resume Next Dim indeks As Integer = 0

  Dim iterasi As Integer Dim run_time As Stopwatch = Stopwatch.StartNew() For x As Integer = 0 To arrKata.Length - 1 Dim words As String = arrKata(x) Dim id As String = arrArti(x) Dim b() = StringMatch.KMP.KMPUtil.GetAllOccurences(txtCari.Text, arrKata(x)).ToArray If b.Length > 0 Then ReDim Preserve hasilpencarianKMP(indeks) hasilpencarianKMP(indeks) = words ReDim Preserve indo(indeks) indo(indeks) = id indeks += 1 End If Next run_time.Stop() run_timeKMP = run_time.Elapsed.TotalSeconds If hasilpencarianKMP.Count <= 0 Or hasilpencarianKMP.Length <= 0 Then 'Bila hasil tidak ditemukan Array.Clear(hasilpencarianKMP, 0, hasilpencarianKMP.Length) ListView2.Items.Add("Kata Tidak ditemukan").ForeColor = Color.Red lblInfoKMP.Text = "0 Hasil" & " dalam " & run_timeKMP & " Detik" iterasi = 0 ReDim hasilpencarianKMP(0) Else iterasi = hasilpencarianKMP.Length Dim batas As Integer If hasilpencarianKMP.Length >= 50 Then batas = 50 Else batas = hasilpencarianKMP.Length - 1 End If ListView2.Visible = True ListView2.Items.Clear() For y As Integer = 0 To batas With ListView2.Items.Add(hasilpencarianKMP(y), 0) .SubItems.Add(0) End With If ((IndexOf(arrKata, hasilpencarianKMP(y))) <= batasSunda) Then ListView2.Items(y).SubItems(0).BackColor = Color.LightBlue

  ElseIf ((IndexOf(arrKata, hasilpencarianKMP(y))) <= batasBatak) Then ListView2.Items(y).SubItems(0).BackColor = Color.Coral Else ListView2.Items(y).SubItems(0).BackColor = Color.LightPink End If Next If hasilpencarianKMP(0) = Nothing Then lblInfoKMP.Text = "0 Hasil" & " dalam " & run_timeKMP & " Detik" Else lblInfoKMP.Text = iterasi & " Hasil" & " dalam " & run_timeKMP & " Detik" End If If ckInstan.Checked = True Then Array.Clear(hasilpencarianKMP, 0, hasilpencarianKMP.Length) End If End If End Sub Private Sub ckInstan_CheckedChanged(sender As Object, e As EventArgs) If ckInstan.Checked = False Then Panel4.Visible = False Else Panel4.Visible = True End If End Sub Private Sub btnLD_Click_1(sender As Object, e As EventArgs) ckInstan.Checked = False If Len(txtCari.Text) > 0 Then cariText = txtCari.Text LD() Algo = True frmHasil.Show() Else MsgBox("Isi keyword pencarian terlebih dahulu") End If End Sub Private Sub Button4_Click_1(sender As Object, e As EventArgs) frmBantuan.Show() End Sub

  Private Sub btnTentang_Click(sender As Object, e As EventArgs) frmTentang.Show() End Sub Private Sub TambahToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles TambahToolStripMenuItem.Click 'Dim NewMDIChild As New frmHasil() 'Set the Parent Form of the Child window.

  ' NewMDIChild.MdiParent = Me 'Display the new form. 'NewMDIChild.Show() frmTambahKata.Show() End Sub Private Sub btnTK_Click_1(sender As Object, e As EventArgs) frmTambahKata.Show() End Sub Private Sub frmUtama_Resize(sender As Object, e As EventArgs) Handles Me.Resize End Sub Private Sub PictureBox1_Click(sender As Object, e As EventArgs) End Sub Private Sub ListView1_SelectedIndexChanged(sender As Object, e As EventArgs) End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Form3.Show() End Sub Private Sub FullscreenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles FullscreenToolStripMenuItem.Click If Me.WindowState = FormWindowState.Normal Then Me.WindowState = FormWindowState.Maximized Else

  Me.WindowState = FormWindowState.Normal End If End Sub Private Sub KeluarToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles KeluarToolStripMenuItem.Click Dim tanya As String = MsgBox("Apakah anda yakin akan keluar?", vbQuestion + vbYesNo, "Keluar") If tanya = vbYes Then End End If End Sub Private Sub btnLD_Click(sender As Object, e As EventArgs) ckInstan.Checked = False If Len(txtCari.Text) <= 0 Then MsgBox("Isi keyword pencarian terlebih dahulu") ElseIf lblInfoLD.Text = "" Then MsgBox("Hasil Pencarian Tidak ada") MsgBox((Mid(lblInfoLD.Text, 0, 1))) Else cariText = txtCari.Text LD() Algo = True frmHasil.Show() End If End Sub Private Sub btnKMP_Click_1(sender As Object, e As EventArgs) ckInstan.Checked = False If Len(txtCari.Text) > 0 Then cariText = txtCari.Text KMP() Algo = False frmHasil.Show() Else MsgBox("Isi keyword pencarian terlebih dahulu") End If End Sub Private Sub btnTK_Click_2(sender As Object, e As EventArgs) Handles btnTK.Click frmTambahKata.Show() End Sub

  Private Sub btnTentang_Click_1(sender As Object, e As EventArgs) Handles btnTentang.Click frmTentang.Show() End Sub Private Sub btnBantuan_Click(sender As Object, e As EventArgs) Handles btnBantuan.Click frmBantuan.Show() End Sub Private Sub txtCari_KeyDown1(sender As Object, e As KeyEventArgs) Handles txtCari.KeyDown If e.KeyCode = Keys.Enter Then ckInstan.Checked = True Panel5.Top = 198 lblCaption.Visible = False ElseIf e.KeyCode = Keys.Down Then ListView1.Focus() End If End Sub Private Sub txtCari_TextChanged(sender As Object, e As EventArgs) Handles txtCari.TextChanged Timer1.Stop() Timer1.Start() End Sub Private Sub ckInstan_CheckedChanged_1(sender As Object, e As EventArgs) End Sub Private Sub btnLD_Click_2(sender As Object, e As EventArgs) Handles btnLD.Click ckInstan.Checked = False If Len(txtCari.Text) <= 0 Then MsgBox("Isi keyword pencarian terlebih dahulu") ElseIf lblInfoLD.Text = "" Then MsgBox("Hasil Pencarian Tidak ada") MsgBox((Mid(lblInfoLD.Text, 0, 1))) Else cariText = txtCari.Text LD() Algo = True frmHasil.Show() End If End Sub

  Private Sub btnKMP_Click_2(sender As Object, e As EventArgs) Handles btnKMP.Click ckInstan.Checked = False If Len(txtCari.Text) > 0 Then cariText = txtCari.Text KMP() Algo = False frmHasil.Show() Else MsgBox("Isi keyword pencarian terlebih dahulu") End If End Sub Private Sub ListView1_Click1(sender As Object, e As EventArgs) Handles ListView1.Click On Error Resume Next Dim tempkataLD As String tempkataLD = (ListView1.Items(ListView1.FocusedItem.Index).SubItems(0) .Text) Dim indeks2 As Integer = ListView1.FocusedItem.Index If tempStrLD <> Nothing Then ListView1.Items(clickedLD).SubItems(0).Text = tempStrLD End If If tempkataLD.Contains("=") = False Then ListView1.Items(ListView1.FocusedItem.Index).SubItems(0).

  Text = tempkataLD & " = " & indoLD(indeks2).ToString ListView1.Columns.Item(0).Width = ListView1.Items(ListView1.FocusedItem.Index).SubItems(0).

  Text.Length * 10 tempStrLD = tempkataLD clickedLD = indeks2 End If End Sub Private Sub ListView2_Click1(sender As Object, e As EventArgs) Handles ListView2.Click On Error Resume Next Dim tempkata As String tempkata = (ListView2.Items(ListView2.FocusedItem.Index).SubItems(0) .Text).ToLower Dim indeks2 As Integer = ListView2.FocusedItem.Index

  If tempStr <> Nothing Then ListView2.Items(clicked).SubItems(0).Text = tempStr End If If tempkata.Contains("=") = False Then ListView2.Items(ListView2.FocusedItem.Index).SubItems(0).

  Text = tempkata & " = " & indo(indeks2).ToString ListView2.Columns.Item(0).Width = ListView2.Items(ListView2.FocusedItem.Index).SubItems(0).

  Text.Length * 10 tempStr = tempkata clicked = indeks2 End If End Sub Private Sub ListView2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListView2.SelectedIndexChanged End Sub Private Sub ListView1_SelectedIndexChanged_1(sender As Object, e As EventArgs) Handles ListView1.SelectedIndexChanged End Sub Private Sub ListView3_SelectedIndexChanged(sender As Object, e As EventArgs) End Sub Private Sub ckInstan_CheckedChanged_2(sender As Object, e As EventArgs) Handles ckInstan.CheckedChanged End Sub End Class Namespace StringMatch.KMP Public NotInheritable Class KMPUtil Private Sub New() End Sub Public Shared Function GetAllOccurences(pattern As String, teks As String) As ArrayList Return GetOccurences(pattern, teks)

  End Function Public Shared Function GetOccurencesForReverseString(pattern As String, teks As String) As ArrayList 'Untuk Pencarian teks terbalik Dim array__1 As Char() = pattern.ToCharArray() Array.Reverse(array__1) Return GetOccurences(New String(array__1), teks) End Function Private Shared Function GetOccurences(pattern As String, teks As String) As ArrayList 'Pencarian normal Dim hasil As ArrayList Dim ArrayTransisi As Integer() Dim charArray As Char() Dim patternArray As Char() charArray = teks.ToLower().ToCharArray() 'Mengubah char array kedalam non kapital patternArray = pattern.ToLower().ToCharArray() hasil = New ArrayList() Dim prefixArray As New PrefixArray(pattern) ArrayTransisi = prefixArray.ArrayTransisi Dim k As Integer = 0 For i As Integer = 0 To charArray.Length - 1 'bila item ke-i pada char array cocok dengan item ke-k pada pattern array If charArray(i) = patternArray(k) Then k += 1 Else 'Bila tidak cocok..lanjut ke pattern selanjutnya Dim prefix As Integer = ArrayTransisi(k) If prefix + 1 > patternArray.Length AndAlso charArray(i) <> patternArray(prefix + 1) Then k = 0 Else k = prefix End If End If

  'string ditemukan apabila panjang char array sama dengan panjang pattern If k = patternArray.Length Then 'tambahkan pada array hasil hasil.Add(i - (patternArray.Length - 1)) k = ArrayTransisi(k - 1) End If Next Return hasil End Function End Class Public Class PrefixArray Private pattern As String Private hArray As Integer() Public Sub New(pattern As String) If pattern Is Nothing OrElse pattern.Length =

  0 Then Throw New ArgumentException("Pattern tidak boleh kosong", "pattern") End If Me.pattern = pattern hArray = New Integer(pattern.Length - 1) {} ComputeHArray() End Sub Private Sub ComputeHArray() 'Array to keep track of the sub string ' in each iteration Dim temp As Char() = Nothing 'An array containing the characters of the string Dim patternArray As Char() = pattern.ToCharArray() 'The first character in the string... 'At this point the patern length is validated to be atleast 1 Dim firstChar As Char = patternArray(0) 'This defaults to 0 hArray(0) = 0 For i As Integer = 1 To pattern.Length - 1 temp = SubCharArray(i, patternArray) hArray(i) = GetPrefixLegth(temp, firstChar) Next End Sub Private Shared Function GetPrefixLegth(array As Char(), charToMatch As Char) As Integer For i As Integer = 2 To array.Length - 1 'if it is a match If array(i) = charToMatch Then If IsSuffixExist(i, array) Then 'Return on the first prefix which is the largest Return array.Length - i End If End If Next Return 0 End Function Private Shared Function IsSuffixExist(index As Integer, array As Char()) As Boolean 'Keep track of the prefix index Dim k As Integer = 0 For i As Integer = index To array.Length - 1 'A mismatch so return If array(i) <> array(k) Then Return False End If k += 1 Next Return True End Function Private Shared Function SubCharArray(endIndex As Integer, array As Char()) As Char() Dim targetArray As Char() = New Char(endIndex) {} For i As Integer = 0 To endIndex targetArray(i) = array(i) Next Return targetArray End Function Public ReadOnly Property ArrayTransisi() As Integer() Get Return hArray End Get

  End Property End Class End Namespace Public Function LevenshteinDistance(ByVal s As String, ByVal t As String) As Integer Dim n As Integer = s.Length Dim m As Integer = t.Length Dim d(n + 1, m + 1) As Integer If n = 0 Then Return m End If If m = 0 Then Return n End If Dim i As Integer Dim j As Integer For i = 0 To n 'Kolom d(i, 0) = i Next For j = 0 To m 'Baris d(0, j) = j Next For i = 1 To n For j = 1 To m Dim cost As Integer If t(j - 1) = s(i - 1) Then cost = 0 Else cost = 1 End If d(i, j) = Math.Min(Math.Min(d(i - 1, j) + 1, d(i, j - 1) + 1), d(i - 1, j - 1) + cost) 'Substituting, Deleting, Inserting Next Next Return d(n, m) 'Return last distance End Function End Module

  Dim k As Integer = 0 For i As Integer = 0 To charArray.Length - 1 If charArray(i) = patternArray(k) Then k += 1 Else Dim prefix As Integer = ArrayTransisi(k) If prefix + 1 > patternArray.Length AndAlso charArray(i) <> patternArray(prefix + 1) Then k = 0 Else k = prefix End If End If If k = patternArray.Length Then hasil.Add(i - (patternArray.Length - 1)) k = ArrayTransisi(k - 1) End If Next Return hasil End Function End Class

  Saya yang bertanda tangan dibawah ini :

  Nama : Ryan Dhika Priyatna Alamat : JL. Bunga Wijaya Kesuma No. 64 A Medan HP : 085261006228 E-mail : ryandhikapriyatna@gmail.com Tempat / Tanggal Lahir : Binjai 07 Agustus 1992 Jenis Kelamin : Laki-Laki Status : Belum Menikah

  PENDIDIKAN

  1998 – 2004 : SD Taman Asuhan Kota Pematang Siantar 2004 : SMP Yayasan Perguruan Keluarga Pematang Siantar

  • – 2007 2007 : SMA Negeri 4 Pematang Siantar – 2010 2010 : D-III Teknik Informatika Universitas Sumatera Utara – 2013 2013 : S-1 Ekstensi Ilmu Komputer Universitas Sumatera Utara – 2015

  SEMINAR

   Seminar Nasional Literasi Informasi (SENARAI) 2014 Fakultas Ilmu Komputer dan Teknologi Informasi Universitas Sumatera Utara.

  Demikianlah Daftar Riwayat Hidup ini saya perbuat dengan sebenarnya.

  Hormat Saya, Ryan Dhika Priyatna

Dokumen yang terkait

BAB II PROFIL PERUSAHAAN - Peranan Gaya Kepemimpinan Dalam Meningkatkan Kinerja Karyawan Pada Pt. Asam Jawa Medan

0 0 16

BAB II PROFIL INSTANSI 2.1. Sejarah Kantor Gubernur Provinsi Sumatera Utara 2.1.1. Sejarah Berdirinya Kantor Gubernur Provinsi Sumatera Utara - Tugas Akhir dengan judul Peranan Sekretaris dalam Perjalanan Dinas Staf Ahli Gubernur pada Sekretariat Staf Ahl

0 0 20

BAB I PENDAHULUAN 1.1. Latar Belakang - Tugas Akhir dengan judul Peranan Sekretaris dalam Perjalanan Dinas Staf Ahli Gubernur pada Sekretariat Staf Ahli Gubernur di Kantor Gubernur Provinsi Sumatera Utara

0 1 9

BAB II PROFIL DINAS PENDAPATAN PROVINSI SUMATERA UTARA A. Sejarah Ringkas Dinas Pendapatan Provinsi Sumatera Utara - Etiket Kerja Sekretaris Dinas Pendapatan Provinsi Sumatera Utara Dalam Memberikan Pelayanan Kepada Tamu Di Dinas Pendapatan Provinsi Sumat

0 0 20

BAB III PEMBAHASAN A. Tempat dan Waktu Penelitian - Pelaksanaan Manajemen Perkantoran Pada Dinas Pertanian Provinsi Sumatera Utara

0 0 13

BAB II TINJAUAN PUSTAKA 2.1 Implementasi 2.1.1 Pengertian Implementasi - Implementasi Program Pembinaan Anak Jalanan Kota Medan di Dinas Sosial dan Ketenagakerjaan Kota Medan

0 0 33

BAB I PENDAHULUAN 1.1 Latar Belakang - Implementasi Program Pembinaan Anak Jalanan Kota Medan di Dinas Sosial dan Ketenagakerjaan Kota Medan

0 0 15

Implementasi Program Pembinaan Anak Jalanan Kota Medan di Dinas Sosial dan Ketenagakerjaan Kota Medan

0 0 8

BAB I PENDAHULUAN 1.1 Latar Belakang Masalah - Implementasi Strategi Pengendalian Pertumbuhan Penduduk Pada Badan Pemberdayaan Perempuan Dan Keluarga Berencana (Bppkb) Di Kecamatan Kabanjahe Kabupaten Karo

0 0 24

PENGARUH INSENTIF TERHADAP KINERJA PEGAWAI (Pada Kantor Kementerian Agama Kota Medan) SKRIPSI Diajukan Guna Memenuhi Salah Satu Syarat Untuk Memperoleh Gelar Sarjana Ilmu Sosial dan Ilmu Politik

0 0 10