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.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)
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
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
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)
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 =
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
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)
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
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 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
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)
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
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
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
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
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
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
'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
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
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
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
DAFTAR RIWAYAT HIDUP
Saya yang bertanda tangan dibawah ini :
DATA PRIBADI
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 – 2007 : SMP Yayasan Perguruan Keluarga Pematang Siantar
2007 – 2010 : SMA Negeri 4 Pematang Siantar
2010 – 2013 : D-III Teknik Informatika Universitas Sumatera Utara
2013 – 2015 : S-1 Ekstensi Ilmu Komputer Universitas Sumatera Utara
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,