Bruteforce vs. iterative Verfeinerung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
acoolon
User
Beiträge: 27
Registriert: Samstag 2. August 2008, 20:16

Moin ich habe ne kleine Frage (welche mich aber doch sehr beschaeftigt hat):

Code: Alles auswählen

from random import randint

wert = randint(1,1000)
start = 0
vorzeichen = 1
schritt = 500
zaehler = 0

while start != wert:
	zaehler += 1
	start += schritt*vorzeichen

	if wert > start and vorzeichen == -1:
		vorzeichen = 1
		schritt /= 2
	elif wert < start and vorzeichen == 1:
		vorzeichen = -1
		schritt /= 2
	
print "Yay! %i Schritte" %zaehler
Ist das Bruteforce oder ist es iterative Verfeinerung. Ich tendierte zu Bruteforce, doch dann dachte ich mir das hier passt besser:

Code: Alles auswählen

from random import randint

wert = randint(1,1000)
start = 0
schritt = 1
zaehler = 0

while start != wert:
	zaehler += 1
	start += schritt
	
print "Yay! %i Schritte" %zaehler
Allerdings dachte ich mir auch, das es fuer iterative Verfeinerung einen etwas klügeren Weg geben sollte. Trotzdem tendiere ich nun zur iterativen Verfeinerung. Koennt ihr mich aufklaeren? Wikipedia und Google haben das nicht geschafft.

o/

PS: ich bin mir sicher man kann diesen Code auch anders/beser/schoener schreiben, fuer Hinweise bin ich ganz klar dankbar, aber darum geht es mir nicht in erster Linie.

EDIT: hast ja Recht, wenigstens war es einmal richtig (...zur iterativen Verfeinerung...)
Zuletzt geändert von acoolon am Donnerstag 28. Mai 2009, 20:13, insgesamt 1-mal geändert.
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

ITERative verfeinerung...

wie kommst du hier zu diesem begriff, für mich ist das was anderes.
(iterativer aufbau von komplexität in welchem kontext auch immer)

das erste listing scheint mir eine (seltsame implementierung einer) binärsuche zu sein, das zweite ist bruteforce. (du zählst bis zur gesuchten zahl, probierst also stupide solange bis es passt. noch bruteforciger wäre es, wenn du zufällig zahlen im wertebereich auswählst und testest. so ist das programm ja eigentlich schon fast zu intelligent)
Die Brute-Force-Methode (engl. für „Methode der rohen Gewalt“), auch Exhaustionsmethode (von lat. exhaurire = ausschöpfen), ist eine Lösungsmethode für Probleme aus den Bereichen Informatik, Kryptologie und Spieltheorie, die auf dem Ausprobieren aller (oder zumindest vieler) möglichen Fälle beruht.

http://de.wikipedia.org/wiki/Brute-Force-Methode
das machst du in der ersten version ja nicht.
http://www.kinderpornos.info
acoolon
User
Beiträge: 27
Registriert: Samstag 2. August 2008, 20:16

Nun, warum ich auf die Bezeichnung iterative Verfeinerung komme ist ganz einfach:

Ich wusste es nicht besser. Ich hatte ein Bild vor Augen mit einigen kleinen Graphen wo der eine dem anderen angenaehrt wurde. In dem Text dazu stand etwas von der iterativen Verfeinerung.

Naja iterativ meint doch, das eine Schleife solange durchlaufen wird bis die Berechnungen ein Ergebnis zutage bringen, welches zur Beendigung der Schleife fuehrt. Somit kann auch die binaere Suche iterativ implementiert werden (obwohl ich es eher rekursiv machen wuerde).

Ja den Artikel habe ich mir auch angeschaut, vllt. koennte man ja sagen es sei ein 'intelligenter' Bruteforce Versuch.

Aber ok, danke ich denke fuer mich ist es etwas klarer geworden. Ist vllt. auch einfach nur ne persoehnliche Definitionssache.
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

acoolon hat geschrieben: Naja iterativ meint doch, das eine Schleife solange durchlaufen wird bis die Berechnungen ein Ergebnis zutage bringen, welches zur Beendigung der Schleife fuehrt. Somit kann auch die binaere Suche iterativ implementiert werden (obwohl ich es eher rekursiv machen wuerde).
dann schau dir auch noch den artikel zu iteration bei wikipedia an.
acoolon hat geschrieben:Ja den Artikel habe ich mir auch angeschaut, vllt. koennte man ja sagen es sei ein 'intelligenter' Bruteforce Versuch.
das kannst du machen, macht aber wenig sinn :wink:

acoolon hat geschrieben:Ist vllt. auch einfach nur ne persoehnliche Definitionssache.
von privaten definitionen solltest du abstand nehmen. das führt im besten fall missverständnissen...
http://www.kinderpornos.info
acoolon
User
Beiträge: 27
Registriert: Samstag 2. August 2008, 20:16

Dill hat geschrieben:
acoolon hat geschrieben: Naja iterativ meint doch, das eine Schleife solange durchlaufen wird bis die Berechnungen ein Ergebnis zutage bringen, welches zur Beendigung der Schleife fuehrt. Somit kann auch die binaere Suche iterativ implementiert werden (obwohl ich es eher rekursiv machen wuerde).
dann schau dir auch noch den artikel zu iteration bei wikipedia an.
Hab ich, dann schau du dir doch mal das Python Beispiel // die anderen Beispiele an, kommen meiner ersten Loesung recht nahe, finde ich.
Dill hat geschrieben:
acoolon hat geschrieben:Ist vllt. auch einfach nur ne persoehnliche Definitionssache.
von privaten definitionen solltest du abstand nehmen. das führt im besten fall missverständnissen...
mag sein, aber wenn man sich nicht einigt ;)
Antworten