• Tidak ada hasil yang ditemukan

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

N/A
N/A
Protected

Academic year: 2019

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

Copied!
23
0
0

Teks penuh

(1)

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

(2)

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)

(3)

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

(4)

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

(5)

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)

(6)

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 =

(7)

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

(8)

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)

(9)

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

(10)

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

(11)

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

(12)

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)

(13)

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

(14)

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

(15)

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

(16)

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

(17)

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

(18)

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

(19)

'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

(20)

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

(21)

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

(22)

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

(23)

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,

Referensi

Dokumen terkait

Tujuan dari Penelitian ini adalah, untuk menghasilkan soal-soal open-ended yang valid dan praktis pada pokok bahasan segitiga dan segiempat di SMP, serta untuk melihat

Skripsi adalah karya tulis ilmiah yang mengemukakan pendapat penulis berdasar pendapat orang lain dimana karya ilmiah yang ditulis berdasarkan hasil penelitian lapangan, didukung

Hadits juga merupakan sumber bagi da’wah dan bimbingan bagi seorang muslim, ia juga merupakan sumber ilmu pengetahuan religius (keagamaan), dan sosial yang dibutuhkna umat

In conclusion, considering the white dragon fruit extract effectively increase the synthesis of testosterone as well as the spermiogenic parameters thus the

Menjelaskan sebab terjadinya karena tindakan yang tidak sesuai prosedur, teknik operasi yang cukup sulit dan peralatan yang kurang memadai, serta

Dan masa adaptasi penggunaan kontrasepsi IUD adalah jangka waktu yang dibutuhkan pengguna IUD dalam merespon keberadaan IUD di dalam rahimnya ditandai dengan

Sekali-sekali pasien akan mengalami rasa napas yang pendek (seperti orang yang kelelahan) dan bukanya tekanan pada substernal.Sekali-sekali bisa pula

• Apabila pengajuan Substantifnya diajukan setelah berakhirnya jangka waktu pengumuman, maka Pemeriksaan Substantifnya dilakukan setelah tgl. diterimanya Permohonan