Ist eine Vorliebe für Brute-Force-Lösungen ein schlechtes Zeichen? [geschlossen]

StackOverflow https://stackoverflow.com/questions/418465

  •  03-07-2019
  •  | 
  •  

Frage

Ich bin ein Anfänger C ++ Programmierer, und mein Geist zu strecken Ich habe einige der Probleme, die versuchen, auf projecteuler.net . Trotz eines Interesse an der Mathematik in der Schule, habe ich finde ich automatisch auf die Probleme für Brute-Force-Lösungen gehen, anstatt auf der Suche nach etwas rationalisieren oder elegant.

Klingt wie eine schlechte Einstellung zu haben? Ich fühle mich ein bisschen schuldig es so zu tun, aber vielleicht schnell und schmutzig einen Teil der Zeit in Ordnung ist ...

War es hilfreich?

Lösung

Ich glaube, Sie an, was Ihr Endziel aussehen sollte und was Ihre Zwänge sind.

Manchmal kann eine Brute-Force-Methode ein Problem in 50ms löst jede Kombination von Lösungen auszuprobieren und eine „clevere“ Lösung kann es in 10ms lösen. Zu diesem Zeitpunkt ist, desto weniger klug, aber leichter zu verstehen Lösung trumpft die clevere Lösung.

Es gibt jedoch einige Probleme, bei denen Brute zwingen nicht nur unelegant, aber einfach nicht funktionieren. Es gibt viele Probleme, bei denen, wenn man sie Brute-Force naiv versuchen, wird es eine erhebliche Menge an Zeit in Anspruch nehmen, sie zu lösen. So offensichtlich, diese Art von Problemen benötigt einen eleganteren Ansatz.

Also fragen Sie sich, warum Sie diese Projekt Euler Probleme versuchen? Machst du es zu lernen? Dann vielleicht eine clevere Lösung versuchen würde in Ihrem Interesse sein, aber erst, nachdem Sie versucht haben, zunächst eine Brute-Force-Lösung zu helfen, ein Verständnis des Problems zu erhalten.

Wenn die Probleme Python Herausforderung zu tun ich versuche, es zu tun, um die knappste Art und Weise kann ich, die Grenzen meiner Fähigkeiten schieben. Nachdem ich es löse ich dann andere Völker Antworten überprüfen und mentale Notizen von Menschen nehmen, die als mich klüger waren und was sie taten. Manche Leute machen spezielle Verwendung einer Datenstruktur ich nicht gedacht hatte, um die Aufgabe besser geeignet ist oder sie haben wenig mathematischen Tricks, die sie verwenden, um ihren Algorithmus effizienter zu machen. Am Ende hat ich versuchen, so viel von ihrer Klugheit, wie ich kann zu absorbieren und es das nächste Mal machen zeigen, dass ich mit einem Problem von ähnlicher Art präsentiert bin.

Andere Tipps

Nein, das ist keine schlechte Sache. Ich habe Lösungen, die so elegant waren sie falsch waren.

Als Anfänger Programmierer, werden Sie mehr von Ihrer geistigen Energie aufwenden, herauszufinden, wie eigentlich implementieren Dingen in C ++, anstatt Energie zu verbringen eine clevere Lösung für jedes Problem zu finden. Das ist in Ordnung, weil es Ihnen die Möglichkeit gibt, verschiedene Bereiche von C ++ zu erkunden, während auf einer Reihe von verschiedenen Arten von Problemen zu arbeiten.

Wenn Sie in C beherrschen ++ und Sie müssen nicht darüber nachdenken, wie jede kleine Sache zu tun, und Sie werden in der Lage sein, mehr Zeit zu verbringen, zu erfinden nicht-Brute-Force-Lösungen.

Die eleganten Lösungen wurden nicht spontan geschaffen; sie wurden von den Brute-Force-Lösungen abgeleitet, wenn mehr Geschwindigkeit oder weniger Speicherverbrauch von der aktuellen Lösung erforderlich war.

Also nein, es ist nicht. Es ist, wie die eleganten Lösungen entstanden ist.

Ich habe irgendwie durch diese Entwicklung fort:

  1. Lass es kompilieren
  2. Machen Sie es wie erwartet
  3. Herauszufinden, eine Lösung, die funktioniert
  4. Herauszufinden, eine gute Lösung
  5. Herauszufinden, mehrere Lösungen und finden Sie die beste
  6. mehrere Lösungen Herauszufinden, und finden Sie die besten für diese Situation
  7. ?? haben noch nicht da bekommen

Ich würde sagen, nein, es ist kein schlechtes Zeichen. In der Tat sind Sie sich selbst einen Gefallen tun, indem Trend weg von vorzeitigen Optimierungen, die auf jeden Fall eine gute Sache ist.

Ken Thompson: "Im Zweifelsfall verwenden brute force"

Lernen ist ein Brute-Force-Prozess. Ich würde nicht seine schlecht sagen. Bei dem Versuch, etwas zu tun, die Art und Weise können Sie ein Muster feststellen. Ich denke, solange man über etwas nachdenken und versuchen, Lösungen zu finden, Sie lernen. Es gibt nur wenige Menschen, die nur auf die eleganteste oder effiziente Lösungen springen.

Es wäre schwer, mich davon zu überzeugen, dass die Menschen, die jemals schlecht bezeichnet werden könnten versuchen zu lernen. Außer vielleicht ein böser Wissenschaftler: P

viel Glück.

Haben Sie passen in der Regel 1 Minute Laufzeit für die Probleme? Wenn ja, dann „Brute-Force“ Lösung erfüllt alle Anforderungen, und das ist eigentlich ein sehr gutes Zeichen, dass Sie schnell etwas einfallen kann, das funktioniert!

Diese Arten von Problemen fördern Mikro-Optimierung und sehr clevere Algorithmen, aber eine sehr lesbare einfache Implementierung wird viel leichter zu pflegen im Allgemeinen und in der Geschäftswelt begünstigt werden.

Wenn es passiert, eine Situation zu sein, wo "brute force" => "einfach" und "elegant" => "Komplex", dann Brute-Force gewinnt. Und das ist sehr oft der Fall.

nicht. das Problem richtig gelöst Get und vollständig dann macht es performant oder elegant wie nötig.

Das ist nicht zu sagen, dass Sie offensichtlich Leistungsverbesserungen ignorieren sollte ... einfach nicht auf sie konzentrieren uns, bis Sie das Problem besser zu verstehen.

Um dies in einem anderen Kontext stellen:

Wenn Sie eine Bibliothek verwenden, die Sie nicht wissen, sehr gut (für UI zu schaffen, zum Beispiel) können Sie ein einfaches Problem in eine perfekt performanten Art und Weise zu lösen, obwohl Sie wissen, dass es ein „richtiger Weg“, es zu tun. Wenn Sie neugierig und besorgt sind, dass Ihr Brute-Force-Code macht man sich wie ein Idiot aussieht, werden Sie bald den „richtigen Weg“ finden, es zu tun (zum Beispiel am Wochenende oder während Sie schlafen). In der Zwischenzeit durch Brute-Force, haben Sie etwas, das funktioniert.

ich tatsächlich vergessen manchmal brutaler Gewalt zu benutzen, und für die „richtige“ Lösung Scannen des API zu starten. Dies ist definitiv ein Fehler in vielen Fällen. Wenn die Brute-Force-Lösung einfach zu implementieren ist, skaliert, wie Sie es (wirklich, wenn es funktioniert) benötigen, dann über die richtige Lösung vergessen. Sie werden es früh genug erfahren (und viele Male Sie bereits wusste es!), aber in der Zwischenzeit gelöst Sie das Problem und konnten zum nächsten gehen.

Straßensperren sind schrecklich, wenn Codierung, und auf jeden Fall mehr als Brute-Force-Lösungen sollten vermieden werden.

Es ist definitiv kein schlechtes Zeichen für Brute-Force zum Trend, vor allem als Anfänger, weil man es nicht besser wissen kann. Vor allem mit dem Projekt Euler, es ist ein schlechtes Zeichen eine Brute-Force-Methode und nicht überprüfen Sie die Kommentare zu implementieren eine effizientere Methode zu lernen.

ich am Ende oft im selben Boot du bist bei, und das ist eigentlich, warum ich tue P. E. begonnen Probleme - ich war viel Brute-Force-Methoden der Umsetzung und wollte mich elegantere Lösungen entlarven ...

You have weigh your option. If the brute force solution will get the job done and perform ok, it is a good solution.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top