Welche etwas gebräuchlichen mathematischen Formeln haben Sie gelernt, um bessere Algorithmen zu schreiben und ein besserer Programmierer zu werden?
Beispiel: Ich habe die ecludian Distanzformel kennengelernt, sqrt((x1-x2)^2+(y1-y2)^2)
die mir durch den Vergleich von 2 Faktoren hilft, ähnliche Objekte zu finden.
learning
math
algorithms
GSto
quelle
quelle
sqrt
. Für eine enge innere Schleife könnte das von Bedeutung sein.Antworten:
Es ist praktisch, die Potenzen von 2 zu kennen, insbesondere wenn es sich um bitweise Operationen auf niedriger Ebene handelt.
quelle
setsockopt(...SO_KEEPALIVE..)
ist ziemlich viel leichter zu lesen oder zu schreiben , alssetsockopt(...16...)
Die Boolesche Algebra wurde bereits erwähnt, aber ich wollte einige praktische Beispiele nennen.
Boolesche Algebra ist sehr oft nützlich, wenn Sie mit komplexen booleschen Ausdrücken arbeiten (
if
z. B. in Anweisungen).Paar nützliche Ausdrücke und Gesetze:
Verteilungsfähigkeit
Also, wenn Sie das nächste Mal auf einen solchen Ausdruck stoßen:
Sie können es leicht verkleinern auf:
Verneinung und De Morgans Gesetz
Nehmen wir an, Sie haben eine solche Aussage:
und Sie müssen das Gegenteil davon bauen. Schreiben:
würde funktionieren, sieht aber nicht so cool aus wie dieses Äquivalent:
quelle
(P -> Q) <=> (!P | Q)
. Ich benutze es die ganze Zeit, da nur sehr wenige Umgebungen einen logischen Implikationsoperator bieten. Dies ist eine sehr praktische Entsprechung für SQL CHECK-Einschränkungen.Nach meiner Erfahrung werden mathematische Formeln für ganz bestimmte Berechnungen verwendet, die möglicherweise für Ihr Projekt gelten oder nicht.
Wenn Sie etwas berechnen müssen, gibt es normalerweise eine Funktion in einer Bibliothek oder einem Beispielquellcode, die es für Sie berechnen kann. Zum Beispiel die Excel-Funktion PMT (), mit der die Zahlungen berechnet werden, die für die Rückzahlung einer Forderung in Höhe von X% über Y Perioden erforderlich sind. Wollen Sie wirklich wissen, wie es berechnet wird, oder reicht es aus, nur das eingebaute aufzurufen?
In den letzten 10 Jahren brauchte ich wohl nichts anderes aus der Mathematikbibliothek als Ceil (), Min () und Max (), was zeigt, dass Computer entwickelt wurden, um mathematikbasierte Probleme zu lösen Heute wird häufig über den Datenfluss entschieden.
Nehmen wir zum Beispiel Facebook, das eine enorme Menge an Code hat. Da ist wahrscheinlich irgendwo etwas Mathematik drin, aber ich vermute hauptsächlich in der Crypto-API, die wahrscheinlich eine Systembibliothek ist. Aber der Datenbankzugriff, die Autorisierungsentscheidungen, der Seitenaufbau und das Weiterleiten von Informationen verbrauchen wahrscheinlich nicht viel Mathematik.
Ja, es gibt Märkte, in denen viel Mathematik benötigt wird - Finanzen, Physik, Ingenieurwesen -, aber in diesen Branchen ist Ihre Hauptdisziplin eher Mathematik / Wirtschaft, Physik, Ingenieurwesen usw. Ihre Frage lautet also: Wie kann ich schreiben? Formel f (x) in Sprache Y? '
Eine bessere Nutzung Ihrer Zeit, IMO, wäre die Untersuchung von Algorithmen (einschließlich Big-O-Notation) und Entwurfsmustern.
quelle
Es gibt keine Formel, die Sie zu einem besseren Programmierer machen könnte.
Mathematische Fähigkeiten können Sie zu einem besseren Programmierer machen:
quelle
Grundlegende Statistikformeln sind gut zu wissen. Ich habe mindestens ein paar Mal lineare Regression verwendet .
quelle
Ich möchte Taylor-Reihen erwähnen , die sehr nützlich sind, um schnelle Annäherungen an "schwerere" Funktionen zu erhalten. Zum Beispiel
sin(x)
kann mit 0 angenähert werdenx-(x*x*x/6)
.Im Allgemeinen ist die Idee, dass es clevere Möglichkeiten gibt, Dinge schnell zu approximieren, anstatt sie auf die letzte signifikante Ziffer zu berechnen (obwohl für elementare Funktionen die meisten modernen Prozessoren schnelle, festverdrahtete Implementierungen enthalten, die Taylor zur Approximation der Sünde verwenden, möglicherweise nicht so bedeutend Geschwindigkeitsgewinn).
quelle
De Morgans Gesetze über das Transformieren von Booleschen "und" und "oder" in Bezug auf Negationen und einige verwandte, elementarere Leckerbissen über die Boolesche Logik (wie die doppelte Negation).
quelle
Dreierregel (Art der Kreuzmultiplikation)
+1 für grundlegende Statistikformeln.
Ich habe viele Leute gesehen, die Schwierigkeiten hatten, diese einfache Regel auf Basiscode anzuwenden.
quelle
Sequence und Serie math.
Ich habe zu viele Schulen gesehen, die lehrten, "schreibe eine Schleife, um alle Zahlen zwischen x und y zu summieren" anstatt "Algorithmen sind FANTASTISCH"
Außerdem ... https://docs.google.com/viewer?url=http://courses.csail.mit.edu/6.042/fall10/mcs-ftl.pdf
quelle
Gesetz des Kosinus , sehr wichtig für viele geometrische Probleme,
insbesondere Winkelbestimmung.
quelle
a^2 + b^2 = c^2
Die Programmierung ist ein sehr weites Feld. Die mathematische Formel hängt davon ab, in welchem Bereich Sie programmieren. Wenn Sie sich mit Grafik und Spielprogrammierung beschäftigen, müssen Sie mehr über Trigonometrie und Geometrie wissen. Spielprogrammierung kann weiter in Bereiche wie Physik, Rendering, Shader eingeteilt werden und die Liste geht weiter. Wenn Sie ein Experte für Physiksimulation sind, sollten Sie sich mit Physik auskennen.
Wenn Sie in Sicherheit sind, müssen Sie ein Zahlentheorie-Experte sein.
Im Allgemeinen können Sie eine Kombination davon wählen, und je nachdem, welches Interesse Sie haben. Lernen tut nie weh.
quelle
Methoden des Beweises
Vor allem diejenigen, die ich mit relativer Häufigkeit verwendet habe:
Es gibt noch mehr, und ich habe viele von ihnen an der einen oder anderen Stelle verwendet, aber dies sind die 3, an die ich mich auf einen Blick erinnern kann. Sie sind auch unendlich hilfreich, wenn Sie beim Schreiben von Unit- oder Integrationstests ihre Absicht berücksichtigen können.
quelle
T (n) = aT (n / b) + f (n), a> = 1, b> 1
Der Hauptsatz ist für die Programmierung gut zu wissen. Damit können Sie Wiederholungsrelationen lösen, mit deren Hilfe Sie die Komplexität rekursiver Algorithmen ermitteln können. Dies ist besonders wichtig, wenn Sie einen Divide-and-Conquer-Algorithmus schreiben. Grob gesagt können Sie den Hauptsatz verwenden, um die Komplexität zu ermitteln, wenn Sie die Komplexität jedes "Schritts" und den Verzweigungsfaktor kennen.
quelle
(die in Klammern sind eher eine "angewandte" Art)
Es ist schwierig, allgemeine Anweisungen zu geben, da dies stark vom Fachgebiet abhängt, in dem Sie tätig sind. Das oben Gesagte deckt jedoch die Grundlagen vieler Ingenieurabschlüsse ab. Allerdings überlappen sich diese Kategorien häufig (Trigonometrie + Matrixoperationen, Kalkül + Matrixoperationen usw.).
Ich habe immer ein mathematisches Handbuch in der Nähe. Man ist sich oft unsicher und es hilft, wenn man etwas organisiert präsentiert.
quelle
Die Kenntnis der Booleschen Algebra ist sehr hilfreich. Es hält Sie davon ab, Code zu schreiben
quelle
Bei Optimierungsproblemen ist es gut, die Log-Wahrscheinlichkeit zu verstehen. Wenn Sie beispielsweise versuchen, eine Quadratsumme zu minimieren, entspricht dies der Maximierung des Wahrscheinlichkeitsprotokolls, da (grob gesagt)
Andere Favoriten im Bereich der Leistungsoptimierung sind Binomial- und Beta-Distributionen. Sie sind sehr einfach zu berechnen.
Wenn Sie 10 zufällige Stichproben des Status eines Programms nehmen und es in einer bestimmten Bedingung für F = 40% der Zeit ist, dann ist es wie ein Münzwurfexperiment mit einer unfairen Münze. Die Häufigkeit, mit der Sie es in diesem Zustand sehen, ist eine Binomialverteilung mit einem Mittelwert von 10 * 0,4 = 4 und einer Standardabweichung von sqrt (10 * 0,4 * 0,6) = sqrt (2,4) = 1,55.
Auf der anderen Seite, wenn Sie 10 Proben nehmen und es zufällig bei 4 Proben in diesem Zustand sehen, was sagt Ihnen das darüber aus, wie groß F ist? Die möglichen Ergebnisse sind 0, 1, 2, 3, 4, ..., 9, 10. Das sind 11 Möglichkeiten, und die Möglichkeit, die Sie gesehen haben (4), ist die 5. Möglichkeit. Also nimm 11 einheitliche (0,1) Zufallszahlen und sortiere sie. Die Verteilung der 5. ist die Verteilung von F, einer Beta-Verteilung. Sein Modus ist 4/10. Sein Mittelwert ist 5/11. Seine Varianz beträgt 5 * 6 / (11 ^ 2 * 12) = 0,021 und die Standardabweichung = 0,144.
Viele Leute denken, dass eine große Anzahl von Beispielen erforderlich ist, um Software-Leistungsprobleme zu lokalisieren und falsche zu vermeiden. Diese Verteilungen zeigen, dass eine kleine Anzahl von Proben viel über ihre Kosten aussagen kann.
quelle
Dies mag ein bisschen einfach sein, ist aber
G=(V,E)
gut zu bedenken. Mit anderen Worten, ein Graph ist eine Menge von Eckpunkten und Kanten. Diagramme sind einfach so nützlich, um viele Dinge darzustellen.quelle