Toon posts:

[VB]array probleem*(begrijpen van een algoritme)*

Pagina: 1
Acties:

Verwijderd

Topicstarter
Mensen,

op internet heb ik de volgende code gevonden om een numerieke array te randomizen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Function RandomizeINTArray(theArray() As Integer, count As Integer)
    Randomize
    Dim RandNum As Integer
    Dim shuffle1() As Integer
    ReDim shuffle1(count - 1)
    
    For i = 0 To count - 1
      shuffle1(i) = 0
    Next i
    For i = 0 To count - 1
      RandNum = Int(Rnd * count)
      If shuffle1(RandNum) = 0 Then
        shuffle1(RandNum) = theArray(i)
      Else
        i = i - 1
      End If
    Next i
     
    For i = 0 To count - 1
      theArray(i) = shuffle1(i)
    Next i
     
End Function

nu staat hier het volgende :
code:
1
2
If shuffle1(RandNum) = 0 Then
shuffle1(RandNum) = theArray(i)

Stel je voor dat RandNum een nummer is dat al een keer geweest is (zou toch mogelijk zijn), en dat toen de plaats gevuld is met een 0 uit theArray(), dan zou de voorwaarde dat de inhoud van die regel een 0 is opgaan, en zal die waarde dus overschreven worden met een ander nummer uit theArray()...

Toch gebeurd dit niet, ook na vele malen uitproberen. Nu begrijp ik dit dus niet. Kan iemand mij dit uitleggen.

Bedankt

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

De hele array shuffle staat vol met 0-en..

Je loopt de volle array door, daar zoek je elke keer een lege plaats bij (waar een 0 staat..) dit betekent dat als je 10 plaatsen hebt met op 9 plaatsen een 1 en op 1 plaats een 0, dat je door de hele array loopt, als je dan de 0 als eerste pakt, komt die overal te staan, dan voeg je 9 keer een 1 toe in die array.. de plaats die overblijft is jouw 0 die je de eerste keer eergens hebt geplaatst (maar wat dus niet uitmaakt)

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Verwijderd

Topicstarter
Mijn god, hoe dom kan ik zijn idd :?, Stil maar wouter

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 13-09 15:13
Dit algoritme kan een stuk beter, door geen gebruik te maken van een tijdelijke array en dus behalve de ruimte ook de tijd voor het initialiseren en kopiëren van die array te besparen.

Even uit de losse pols (lees: er zullen wel een aantal fouten in zitten) en in pseudocode (een array met N elementen loopt van 0 tot en met N-1):
code:
1
2
3
4
5
6
7
N = (lengte van array) - 1
while(N>0)
begin
  P = random getal (0 <= P <= N)
  verwissel (array[N], array[P])
  N = N - 1
end

PS. Wat heeft dit met een logaritme te maken?

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op zondag 03 maart 2002 23:40 schreef Soultaker het volgende:
[..]
PS. Wat heeft dit met een logaritme te maken?
Dit had alles te maken met de algoritme, omdat er geen probleem was, Hij begreep niet waarom de functie altijd correct was. Betekent dus dat hij de algoritme niet begreep. ( Let op de Spelling :P )

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 13-09 15:13
Op zondag 03 maart 2002 23:44 schreef dusty het volgende:
Dit had alles te maken met de algoritme, omdat er geen probleem was, Hij begreep niet waarom de functie altijd correct was. Betekent dus dat hij de algoritme niet begreep. ( Let op de Spelling :P )
Misschien ben ik een mierenneuker en hoewel ik moet toegeven dat "de algoritme" hier een verbetering is ten opzichte van logaritme, kan ik het toch niet laten om even te vermelden dat het woord algoritme onzijdig is dus met het lidwoord "het" in plaats van "de" gebruikt moeten worden.

Ik snap nog steeds niet hoe mensen het voor elkaar krijgen om algoritme met logaritme te verwarren; het zijn toch heel erg verschillende woorden. Je zegt toch ook niet "auto" als je "deur" bedoelt of omgekeerd? =)

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op maandag 04 maart 2002 13:03 schreef Soultaker het volgende:
[..]
Ik snap nog steeds niet hoe mensen het voor elkaar krijgen om algoritme met logaritme te verwarren; het zijn toch heel erg verschillende woorden. Je zegt toch ook niet "auto" als je "deur" bedoelt of omgekeerd? =)
Simpel, de vingers typen iets anders dan je wilt typen :)

de letters L en O tik je met je rechterhand.. de letters "G" en "A" met je linkerhand.. laat de co-ördinatie het een keertje afweten krijg je een ander woord :+

Auto en Deur hebben helemaal geen letter overeenkomstig, echter tik ook wel eens duer ipv deur.

met de DE en HET zal je moeten leren leven bij mij, ik gok ook maar elke keer.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • Grum
  • Registratie: Juni 2001
  • Niet online
Op maandag 04 maart 2002 13:33 schreef dusty het volgende:
Auto en Deur hebben helemaal geen letter overeenkomstig, echter tik ook wel eens duer ipv deur.
:+

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 13-09 15:13
Gaat het nog over algoritmes? =)

Verwijderd

Duidelijk een zaak van logische ritmes met algo erin

Verwijderd

Topicstarter
tkrew teh, tknadeb
Pagina: 1