Avatar billede tdaugaard Nybegynder
29. august 2001 - 05:08 Der er 5 kommentarer og
1 løsning

Binary search routine...

Jeg har flg. beskrivelse af en \"binær\" søgerutine fra en engelsk newsgroup, men er der en der kan lave koden til den ?

Et array med f.eks. 1000 elementer er fyldt med strenge af variabel længde, og derefter sorteret alfabetisk. Her kommer søgetingen så ind og det er DEN jeg gerne vil have lavet:

\"A better way is the \"binary\" search.  You keep the array sorted into
alphabetical order.  Look at the middle reoord.  If it
is the record you want, exit.  If the middle record _follows_ the
record you want in alpha order, mark the middle as the new \'top\'
position, recompute the middle position and try again.  If the middle
record _precedes_ the record you are searching for, mark the middle
position as the new \'bottom\' and repeat.  If you get the details
right, this is guaranteed to find the search record (or prove that
it\'s not there) in a 256-element array in just 8 tries.  The work
factor is a logarithmic function of the array size, so a million -
element array would need slightly less than 20 tries.\"

Anyone up for it ?
Avatar billede limemedia Nybegynder
29. august 2001 - 07:49 #1
tdaug >> troede du var færdig med VB ? *g*
Avatar billede jimse Nybegynder
29. august 2001 - 08:08 #2
Hvis du kan bruge et helt færdigt eksempel, kan du hente et her>>
http://www.planet-source-code.com/xq/ASP/txtCodeId.24433/lngWId.1/qx/vb/scripts/ShowCode.htm
Avatar billede proaccess Nybegynder
29. august 2001 - 08:27 #3
Private testArray(1000) As String

Public Function binSearch(strTest As String, minPos As Integer, maxPos As Integer) As String
  Dim midPos As Integer
  midPos = ((maxPos - minPos) / 2) + minPos
  Debug.Print minPos, midPos, maxPos
  If testArray(midPos) = strTest Then
    binSearch = midPos
  ElseIf minPos = maxPos Then
    binSearch = \"Null\"
  ElseIf testArray(midPos) < strTest Then
    binSearch = binSearch(strTest, midPos, maxPos)
  Else
    binSearch = binSearch(strTest, minPos, midPos)
  End If
End Function

Private Sub Command1_Click()
  MsgBox binSearch(Text1, 0, 10)
End Sub
Avatar billede proaccess Nybegynder
29. august 2001 - 09:04 #4
Skulle selvfølgelig være:

Private Sub Command1_Click()
  MsgBox binSearch(Text1, 0, 1000)
End Sub

Jeg testede på mindre array... Du skulle måske også lige overveje at fjerne Debug.Print i binSearch... Også et fragment af testen...

Avatar billede tdaugaard Nybegynder
29. august 2001 - 15:21 #5
jimse:> Kigger på dit link ... færdige eksempler er helt fint :-)
Avatar billede tdaugaard Nybegynder
30. august 2001 - 20:05 #6
jimse:> Det var ik noget værd .. sorry :-(

proaccess:> ser meget fornuftigt ud ...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester