Jakie są dość powszechne wzory matematyczne dowiedziałeś się, że pomógł Ci pisać lepsze algorytmy i stać się lepszym programistą?
Przykład: Dowiedziałem się o ecludian wzoru dystans: sqrt((x1-x2)^2+(y1-y2)^2)
co pomogło mi zrozumieć, jak znaleźć podobne przedmioty porównując 2 czynniki.
learning
math
algorithms
GSto
źródło
źródło
sqrt
krok. To może mieć znaczenie dla ciasnej pętli wewnętrznej.Odpowiedzi:
Znając potęgi 2 jest przydatny, zwłaszcza gdy mamy do czynienia z działalnością bitowe niskopoziomowych.
źródło
setsockopt(...SO_KEEPALIVE..)
jest dość dużo łatwiejsze do odczytu lub zapisu niżsetsockopt(...16...)
Boole'a już wspomniano, ale chciałem przedstawić kilka praktycznych przykładów.
Boole'a przydaje się bardzo często podczas pracy z złożonych wyrażeń logicznych (w
if
sprawozdaniu na przykład).Kilka użytecznych wyrażeń i prawa:
rozdzielność
Następnym razem natkniesz się na takie wyrażenie:
Można łatwo kurczyć go na adres:
Negacja i prawa De Morgana
Powiedzmy, że masz takie oświadczenie:
i musisz zbudować coś przeciwnego. Pisanie:
działałoby, ale nie wygląda tak fajnie, jak ten odpowiednik:
źródło
(P -> Q) <=> (!P | Q)
. Używam go cały czas, ponieważ bardzo niewiele środowisk oferuje operator logicznej implikacji, jest to bardzo przydatna równoważność ograniczeń SQL CHECK.Z mojego doświadczenia wynika, że formuły matematyczne są używane do bardzo szczegółowych obliczeń, które mogą, ale nie muszą dotyczyć twojego projektu.
Jeśli musisz coś obliczyć, zwykle w bibliotece lub przykładowym kodzie źródłowym jest funkcja, która może to obliczyć. Na przykład funkcja PMT () programu Excel, która oblicza płatności wymagane do spłaty zadłużenia w wysokości X% w okresach Y. Czy naprawdę chcesz wiedzieć, jak to oblicza, czy wystarczy wywołać wbudowany?
W ciągu ostatnich 10 lat nie sądzę, że musiałem używać czegokolwiek z biblioteki Math innej niż Ceil (), Min () i Max (), co pokazuje, że nawet jeśli komputery zostały opracowane w celu rozwiązania problemów matematycznych , dziś powszechnym zastosowaniem jest podejmowanie decyzji dotyczących przepływu danych.
Weźmy na przykład Facebooka, który ma ogromną ilość kodu. Prawdopodobnie gdzieś tam jest trochę matematyki, ale podejrzewam, że głównie w API Crypto, które prawdopodobnie jest biblioteką systemową. Ale dostęp do bazy danych, decyzje autoryzacyjne, tworzenie stron i routing informacji prawdopodobnie nie używają dużo matematyki.
Tak, są rynki, które potrzebują dużo matematyki - finanse, fizyka, inżynieria - ale w tych branżach twoją podstawową dyscypliną jest matematyka / ekonomia, fizyka, inżynieria itp., Więc twoje pytania brzmiałyby: „jak napisać wzór f (x) w języku Y? ”
Lepszym wykorzystaniem twojego czasu, IMO, byłoby zbadanie algorytmów (w tym notacji Big O) i wzorców projektowych.
źródło
Nie ma formuły, która mogłaby uczynić cię lepszym programistą.
Umiejętności matematyczne mogą sprawić, że będziesz lepszym programistą:
źródło
Podstawowe formuły statystyk są dobrze znane. Użyłem regresji liniowej co najmniej kilka razy.
źródło
Chciałbym wspomnieć o seriach Taylora, które są dość przydatne do szybkiego przybliżania „cięższych” funkcji. Na przykład
sin(x)
około 0 można przybliżać za pomocąx-(x*x*x/6)
.Ogólnie rzecz biorąc, pomysł, że istnieją sprytne sposoby szybkiego przybliżenia rzeczy, zamiast liczenia ich do ostatniej znaczącej cyfry (chociaż w przypadku funkcji elementarnych większość współczesnych procesorów zawiera szybkie implementacje przewodowe, więc użycie Taylora do przybliżenia grzechu może nie być tak znaczące przyrost prędkości).
źródło
Prawa De Morgana dotyczące przekształcania logiki „i” i „lub” w stosunku do negacji oraz kilka powiązanych bardziej elementarnych ciekawostek na temat logiki boolowskiej (takich jak podwójna negacja).
źródło
Reguła trzech (rodzaj mnożenia krzyżowego)
+1 za podstawowe formuły statystyk.
Widziałem wielu facetów mających trudności z zastosowaniem tej prostej reguły do kodu podstawowego.
źródło
Matematyka sekwencji i serii .
Widziałem zbyt wiele szkół nauczanie „napisać pętlę do sumy wszystkich liczb pomiędzy X i Y” zamiast „algorytmy są niesamowite”
Ponadto ... https://docs.google.com/viewer?url=http://courses.csail.mit.edu/6.042/fall10/mcs-ftl.pdf
źródło
Prawo Cosinusów , bardzo ważne dla wielu problemów geometrycznych,
szczególnie określenie kąta.
źródło
a^2 + b^2 = c^2
Programowanie jest bardzo szeroką dziedziną. Formuła matematyczna zależy od tego, w jakim obszarze programowania jesteś. Jeśli interesujesz się grafiką, programowaniem gier, musisz znać więcej trygonometrii, geometrii. Programowanie gier można dalej podzielić na takie obszary, jak fizyka, rendering, shader ... i lista jest długa. Więc jeśli jesteś ekspertem od symulacji fizyki, powinieneś wiedzieć rzeczy związane z fizyką.
Jeśli jesteś w bezpieczeństwie, musisz być ekspertem w dziedzinie teorii liczb.
Ogólnie rzecz biorąc, możesz wybrać kombinację tych, i które zawsze są twoje zainteresowania. Uczenie się nigdy nie boli.
źródło
Metody sprawdzania
W szczególności te, których użyłem z względną częstotliwością:
Jest ich więcej i użyłem wielu z nich w tym czy innym momencie, ale są to 3, które mogę sobie przypomnieć, na pierwszy rzut oka. Są również nieskończenie pomocne, jeśli możesz mieć na uwadze ich zamiary podczas pisania testów jednostkowych lub integracyjnych.
źródło
T (n) = aT (n / b) + f (n), a> = 1, b> 1
Twierdzenie Master jest dobrze znane z programowania. Pozwala rozwiązać relacje rekurencyjne, które mogą pomóc Ci znaleźć złożoność algorytmów rekurencyjnych. Jest to szczególnie ważne przy pisaniu algorytmu typu „dziel i rządź”. Z grubsza mówiąc, możesz użyć twierdzenia głównego, aby uzyskać złożoność, jeśli znasz złożoność każdego „kroku” i współczynnik rozgałęzienia.
źródło
(te w nawiasach są bardziej „stosowane”)
Trudno jest podać ogólne kierunki, ponieważ silnie zależy to od dziedziny, w której się znajdujesz. Ale powyższe obejmuje podstawy dość wielu stopni inżynieryjnych. Pamiętaj, że te kategorie często się pokrywają (trygonometria + operacje na macierzach, rachunek różniczkowy + operacje na macierzach itd.).
Zawsze mam w pobliżu podręcznik matematyki. Często się czegoś nie ma i pomaga to zorganizować w sposób zorganizowany.
źródło
Znajomość algebry boolowskiej bardzo pomaga. To powstrzymuje cię przed pisaniem kodu jak
źródło
W przypadku problemów z optymalizacją dobrze jest zrozumieć prawdopodobieństwo dziennika. Na przykład, jeśli próbujesz zminimalizować sumę kwadratów, to to samo, co maksymalizacja dziennika prawdopodobieństwa, ponieważ (z grubsza mówiąc)
Innymi ulubionymi w dziedzinie strojenia wydajności są rozkłady dwumianowe i beta. Są bardzo proste do obliczenia.
Jeśli weźmiesz 10 losowych próbek stanu programu i jest on w pewnym stanie przez F = 40% czasu, to jest to jak eksperyment rzucania monetą z nieuczciwą monetą. Liczba wyświetleń w tym stanie to rozkład dwumianowy ze średnią 10 * 0,4 = 4 i standardowym odchyleniem sqrt (10 * 0,4 * 0,6) = sqrt (2,4) = 1,55.
Z drugiej strony, jeśli weźmiesz 10 próbek i zobaczysz je w tym stanie na 4 próbkach, co to mówi o tym, jak duże jest F? Możliwe wyniki to 0, 1, 2, 3, 4, ..., 9, 10. To 11 możliwości, a możliwość, którą widziałeś (4), to piąta. Weź więc 11 jednolitych (0,1) liczb losowych i posortuj je. Rozkład piątego to rozkład F, rozkład Beta. Jego tryb jest 4/10. Jego średnia wynosi 5/11. Jego wariancja wynosi 5 * 6 / (11 ^ 2 * 12) = 0,021, a odchylenie standardowe = 0,144.
Wiele osób uważa, że potrzebna jest duża liczba próbek, aby zlokalizować problemy z wydajnością oprogramowania i uniknąć znalezienia fałszywych. Te rozkłady pokazują, że niewielka liczba próbek może wiele powiedzieć o ich koszcie.
źródło
Może to być nieco proste, ale
G=(V,E)
warto o tym pamiętać. Innymi słowy, wykres to zestaw wierzchołków i krawędzi. Wykresy są bardzo przydatne do reprezentowania wielu rzeczy.źródło