ERLEDIGT
JA
JA
ANTWORTEN
9
9
ZUGRIFFE
1277
1277
EMPFEHLEN
-
Hi!
Ich will ein Programm mit VBA schreiben das eine Zufallszahl zwischen 0 und 1000
generiert und dann diese Zahl durch ein binäres suchsytem bestimmt. Die Zahl ist
generiert und ich hab eine Variable zur Feststellung ob die generierte Zahl größer oder kleiner ist als die geratene. Aber wie definiere ich jetzt den nächsten Bereich der überprüft werden soll. Ich hoffe ich hab es ist verständlich.
Gruß BennyTheorie ist Wissen, das nicht funktioniert.
Praxis ist, wenn alles funktioniert und man weiß nicht warum
-
Hat keiner ne Antowrt, oder hab ich das zu umständlich erklärt
plz
GrußTheorie ist Wissen, das nicht funktioniert.
Praxis ist, wenn alles funktioniert und man weiß nicht warum
-
Also für mich hast du es zu umständlich erklärt

Was meinst du denn mit "binäres Suchsystem"?hihi = -h²
-
Hi!
Also bei einer binären suche wirt etwas durch halbiern gesucht.
Beisiel:
Du suchst im Telefonbuch nach dem Namen Ratke dann schlägst du es in der Mitte
auf.Dann landest du bei dem Buchstaben M. R ist aber größer als M also Hlbierst du den hintern Teil wieder. Und kommst zum Buchstaben S. R ist nun kleiner als S und somit muss der Bereich zwischen M und S nochmals halbiert werden. Nun lndet man bei P und stellt fest das R größer ist. .........
Wenn man das nun weiterhin so macht kommt man irgendwann zu dem Buchstaben R.
Bei mir sollen das ganze halt jetzt mit Zahlen stattfinden.
Mein Problem hier an einem Beispiel:
Suche die zahl 300 aus 1000
ich überprüfe bei 500 die Zahl ist kleiner / ich halbiere
also überprüfe ich 250 die Zahl ist größer
ich muss nun die nächste zahl so bestimmen das sie in der Mitte von
250 und 500 liegt also 375 einfaches * 1.5 nehmen hilft hier nicht
das wird hierraus jetzt hoffentlich klar
ich stelle also fest das 300 kleiner ist als 375
wenn ich nun 375 halbiere kome ich auf 183
ich muss aber den bereich zwischen 250 und 375 halbiern
weil kleiner als 250 ist 300 ja nicht
Ich hoff mein Problem ist hierdurch etwas deutlicher geworden.
Es liegt irgendwo bei der übergabe von Variablenwerten.
Ich hab das ja schon ziemlich weit gedacht aber irgendwie komm ich nicht weiter.
Gruß BennyTheorie ist Wissen, das nicht funktioniert.
Praxis ist, wenn alles funktioniert und man weiß nicht warum
-
Hallo das ist ganz einfache binäre Suche:
Ich kenn mich in VB nicht aus aber folgender Pseudocode solltes auch tun:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
procedure guess begin Initialisiere Zufallszahl; var random = nächste Zufallszahl aus 0 und 1000; var min_element = 0; var max_element = 1000; var gefunden = falsch; solange( nicht gefunden) do var mitte = (min_element + max_element) / 2; //ermittle die mitte aus der gegebenen Suchbreite if(mitte == random) then Gebe aus: "Gefunden"; gefunden = wahr; else if( mitte < random) //Suche rechts weiter then min_element = mitte + 1; else //Suche links weiter max_element = mitte - 1; fi fi done end
"I'm not deaf, I'm ignoring you"
----
-
Danke das ist schon mal sehr hilfreich.
Nur ich versteh den Teil mit der Variable Mitte noch nicht so ganz.
Wieso wird die um eins erhöt bzw verringert bie definiert sich dadraus
der neue halbierte zu überprüfende Bereich.
Also wo genau ist mein denkfehler?
Danke
Gruß Benny
Theorie ist Wissen, das nicht funktioniert.
Praxis ist, wenn alles funktioniert und man weiß nicht warum
-
Nicht die Variable mitte wird um eins erhöht, sondern das neue min bzwWieso wird die um eins erhöt bzw verringert bie definiert sich dadraus
der neue halbierte zu überprüfende Bereich.
max_element, ergibt sich aus der mitte + 1 je nachdem ob die errechnete mitte
größer bzw kleinergleich dem gesuchten Element random ist, sprich ob rechts
oder links im neuen Schleifendurchlauf gesucht werden soll:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
zu suchender Wert random 0...............263......................................................................1000 Anfang der Suche: min_element erste mitte(min_element + max_element/2) max_element 0.......................................500..............................................1000 mitte > random => neues max_element ist jetzt mitte - 1 => min_element neue mitte(min_element + neues max_element/2) neues max_element 0.......................................250..............................................499 mitte < random => neues min_element ist jetzt mitte + 1 => neues min_element neue mitte(neues min_element + max_element/2) max_element 251.....................................375..............................................499 usw
Gruß
RedWing"I'm not deaf, I'm ignoring you"
----
-
Hm stimmt! Vielen Dank soweit.
Nur was ich noch nicht ganz verstehe für was genau die +1 und die -1 sind,
also was die genau im Programm ausmachen. Ohne sie funktioniert es auch,
nur tritt dann folgendes Problem auf:
260 wird sowohl mit den einsen als auch ohne sie in 9 Schritten berechnet.
0 wird mit den einsen in 9 Schritten ohne sie aber in 11 Schritten berechnet.
Woran liegt das?
Gruß BennyTheorie ist Wissen, das nicht funktioniert.
Praxis ist, wenn alles funktioniert und man weiß nicht warum
-
Hallo,
min_element = mitte + 1; bzwHm stimmt! Vielen Dank soweit.
Nur was ich noch nicht ganz verstehe für was genau die +1 und die -1 sind,
also was die genau im Programm ausmachen. Ohne sie funktioniert es auch,
nur tritt dann folgendes Problem auf:
max_element = mitte - 1; ergibt sich deswegen da du ja
mitte schon abgehandelt hast.
Sprich nehmen wir an die Mitte ist 500.
Somit hast du 500 schon verglichen. Wieso solltest du dann im nächsten Schritt 500 nochmal
als min bzw max Element zu Rande ziehen? Deswegen macht es Sinn mit 499 als max_element bzw 501 als min_element weiter zu machen...
Ohne dem gehts natürlich auch, wäre aber doppelt gemoppelt...
Gruß
RedWing"I'm not deaf, I'm ignoring you"
----
-
Ok jetzt hab ichs.
Vielen Dank für deine Hilfe,
und noch ein par schöne Feiertage.
Gruß BennyTheorie ist Wissen, das nicht funktioniert.
Praxis ist, wenn alles funktioniert und man weiß nicht warum
Ähnliche Themen
-
Binäre Suche mit Zahlenblöcke
Von oliolioli im Forum C/C++Antworten: 3Letzter Beitrag: 10.02.10, 09:35 -
Binäre Suche Java
Von Saban im Forum JavaAntworten: 13Letzter Beitrag: 25.02.09, 15:59 -
Binäre Suche
Von cuchulainn im Forum Algorithmen & Datenstrukturen mit JavaAntworten: 8Letzter Beitrag: 14.07.08, 22:52 -
Berechnung der Mitte der Liste für binäre Suche schlägt fehl
Von xbugsx im Forum C/C++Antworten: 0Letzter Beitrag: 20.11.07, 03:29 -
binäre Suche
Von djroque im Forum JavaAntworten: 4Letzter Beitrag: 15.01.05, 16:06





Zitieren
Login




