Quais são as boas fórmulas matemáticas a saber para programação? [fechadas]


19

Quais são algumas das fórmulas matemáticas comuns que você aprendeu que o ajudaram a escrever algoritmos melhores e a se tornar um programador melhor?

Exemplo: eu aprendi sobre a fórmula da distância ecludiana: sqrt((x1-x2)^2+(y1-y2)^2)que me ajudou a entender como encontrar objetos semelhantes, comparando dois fatores.


2
Não acho que seja a fórmula da distância euclidiana.
Greg Hewgill 29/09/10

@Larry @Greg editado.
precisa saber é o seguinte

haha como sobre a seqüência fibo ... bom para o benchmarking
aggietech

1
Data de conclusão = (Data estimada + Número de dias restantes / 2) ^ (Tempo no trabalho / Tempo em casa) * Número de pizzas gratuitas
Skizz

7
você pode achar interessante saber que, se precisar comparar as distâncias, poderá pular a sqrtetapa. Para um loop interno apertado, isso pode importar.

Respostas:


16

Conhecer as potências de 2 é útil, especialmente ao lidar com operações bit a bit de baixo nível.


+1 - Ser capaz de converter de e para as bases 2, 16, 10 e 8 é uma obrigação.
Mouviciel 29/09/10

2
Não tenho certeza sobre a base 8, mas concordo com 2,16 e 10 conversões. Você deve ser capaz de fazê-lo em um prazo razoável, mas não necessariamente instantaneamente.
Incognito

Meu único professor é um animal hexadecimal. Convertidos em seus números de cabeça ridícula e eu era um TA para ele por um ano ou assim, a classe foi sempre impressionado como era I.
Chris

Eu odeio a base 8 :)

1
Com macros, enums e bitfields em línguas modernas, em que casos é que as pessoas precisam saber potências de 2, que são fundamentalmente números mágicos .. setsockopt(...SO_KEEPALIVE..)é bastante mais fácil de ler ou escrever quesetsockopt(...16...)
JBRWilkinson

15

A álgebra booleana já foi mencionada, mas eu queria fornecer alguns exemplos práticos.

A álgebra booleana é útil com freqüência quando você trabalha com expressões booleanas complexas (em ifinstruções por exemplo).

Algumas expressões e leis úteis:

Distribuição

A e (B | C) = (A e B) | (A e C)

A (B & C) = (A | B) & (A | C)

Então, da próxima vez que você se deparar com essa expressão:

if((A || B) && (A || C) && (A || D) && (A || E)) { ... }

Você pode reduzi-lo facilmente para:

if(A || (B && C && D && E)) { ... }

Negação e lei de De Morgan

! (! A) = A

! (A e B) =! A | ! B

! (A | B) =! A &! B

Digamos que você tenha essa afirmação:

if(!A && !B && !C) {..}

e você precisa construir o oposto disso. Escrevendo:

if(!(!A && !B && !C)) {...}

funcionaria, mas não parece tão legal quanto este equivalente:

if(A | B | C) {...}

2
O problema de fazer isso é se essas são regras de negócios reais, pois elas tendem a mudar. Nesse caso, você precisa reconstruir a expressão original para alterá-la e, em seguida, otimizar novamente. Os mantenedores tendem a resmungar enquanto o fazem.

E é aí que um mapa de Karnaugh pode ajudar. Só funciona bem em até 4 sinalizadores booleanos de uma só vez, mas se você precisar de mais - boa sorte!
Job

3
+1 para a lei de De Morgan. Estou impressionado com o quão poucas pessoas parecem ter sido ensinadas e sabem como aplicá-lo.
Fortyrunner

Você esqueceu um presente: (P -> Q) <=> (!P | Q). Eu o uso o tempo todo, pois poucos ambientes oferecem um operador de implicação lógica; essa é uma equivalência muito útil para as restrições do SQL CHECK.
mu é muito curto

A lei de Karnaugh e De Morgan é algo que você geralmente ensina a usar nas aulas de engenharia elétrica, mas não nas aulas de engenharia da computação. O que é estranho, porque aplicações podem ser encontradas neste último caso, como o uso prático da lei de De Morgan mencionada acima.
Spoike

9

Na minha experiência, as fórmulas matemáticas são usadas para cálculos muito específicos, que podem ou não se aplicar ao seu projeto.

Se você precisar calcular algo, geralmente há uma função em uma biblioteca ou um exemplo de código-fonte ao redor que pode calcular isso para você. Por exemplo, a função PMT () do Excel, que calcula os pagamentos necessários para pagar uma dívida em X% ao longo de períodos Y. Deseja realmente saber como o calcula ou é suficiente apenas chamar o embutido?

Nos últimos 10 anos, acho que não precisei usar nada da biblioteca de matemática além de Ceil (), Min () e Max (), que mostra que, apesar de os computadores terem sido criados para resolver problemas baseados em matemática , o uso comum hoje é a tomada de decisões em torno do fluxo de dados.

Tomemos, por exemplo, o Facebook, que possui uma enorme quantidade de código. Provavelmente há alguma matemática em algum lugar, mas suspeito principalmente na API Crypto, que provavelmente é uma biblioteca de sistemas. Mas o acesso ao banco de dados, as decisões de autorização, a criação de páginas e o roteamento de informações provavelmente não usam muito o Math.

Sim, existem mercados que precisam de muita matemática - finanças, física, engenharia - mas, nesses setores, é mais provável que sua disciplina principal seja matemática / economia, física, engenharia, etc. fórmula f (x) na língua Y?

Um melhor uso do seu tempo, IMO, seria investigar algoritmos (incluindo a notação Big O) e padrões de design.


1
+1 porque parece uma afirmação razoável - não existe uma fórmula específica que você deva conhecer, mas o conceito de complexidade algorítmica (notação Big O) é muito importante.
Michael H.

Muita matemática ... Decide com quais anúncios incomodá-lo.

Concordo que a quantidade de matemática necessária é geralmente muito baixa, embora minha experiência não seja tão baixa quanto a sua - acabo periodicamente usando coisas trigonométricas em gráficos.
Loren Pechtel

7

Não existe uma fórmula que possa torná-lo um programador melhor.

As habilidades relacionadas à matemática podem torná-lo um programador melhor:

  • Método científico - maneira de pensar matemática / ciência e resolução de problemas
  • Abstração - capacidade de reconhecer abstrações e padrões
  • Herança - reutilização de trabalhos / métodos existentes na solução de novos problemas
  • Experiência - compreendendo um conjunto de problemas e soluções

-1, o homem perguntou sobre úteis FORMULAS DE MATEMÁTICA. Não acredito que essa resposta tenha sido votada.
Jas


6

Eu gostaria de mencionar as séries de Taylor, que são bastante úteis para obter aproximações rápidas de funções "mais pesadas". Por exemplo, em sin(x)torno de 0 pode ser aproximado com x-(x*x*x/6).

Em geral, a ideia de que existem maneiras inteligentes de aproximar as coisas rapidamente, em vez de calculá-las para o último dígito significativo (embora, para funções elementares, a maioria dos processadores modernos contenha implementações rápidas e cabeadas, usar o Taylor para aproximar o pecado pode não ser tão significativo ganho de velocidade).


3

As leis de De Morgan, sobre a transformação de booleano "e" e "ou" em relação às negações, e alguns boatos mais elementares relacionados à lógica booleana (como a negação dupla).


2

Regra de três (tipo de multiplicação cruzada)

+1 para fórmulas estatísticas básicas.

Vi muitos caras com dificuldade de aplicar essa regra simples no código básico.


+1 para multiplicação cruzada. Em alguns softwares propensos a problemas de estouro inteiro, a multiplicação cruzada é usada para verificar se os resultados não estouram.
Rwong 24/10/10

2
Não é grande coisa. Isso deve estar enraizado na cabeça de um graduado do ensino médio que deseja estudar CS.
Job

@ Job: Em um mundo teórico, isso é verdade!
Pagotti 8/01/11


2

Lei dos Cossenos , muito importante para muitos problemas geométricos,

texto alternativo

especialmente determinação de ângulo.


o que é gama nessa equação?
Matt Ellen

1
@ Matt Ellen: o ângulo do lado do lado C (IOW, o ângulo entre A e B)
Lie Ryan

2
E, é claro, caso especial para triângulos retângulos:a^2 + b^2 = c^2
Nota para si mesmo - pense em um nome

2

A programação é um campo muito amplo. A fórmula matemática depende da área de programação em que você está. Se você gosta de gráficos, programação de jogos, precisa conhecer mais trigonometria, geometria. A programação de jogos pode ser mais categorizada em áreas como física, renderização, shader ... e a lista continua. Portanto, se você é um especialista em simulação de física, deve saber coisas relacionadas à Física.
Se você gosta de segurança, deve ser um especialista em Teoria dos Números.
Em geral, você pode fazer uma combinação desses, e qual seja o seu interesse. Aprender nunca é demais.


2

Métodos de Prova

Mais notavelmente, os que usei com frequência relativa:

Existem mais, e eu já usei muitos deles em um ponto ou outro, mas esses são os 3 que me lembro de ter usado de relance. Eles também são infinitamente úteis se você puder manter a intenção deles ao escrever testes de unidade ou integração.


2

T (n) = aT (n / b) + f (n), a> = 1, b> 1

O Teorema Mestre é bom saber para programação. Permite resolver relações de recorrência que podem ajudá-lo a encontrar a complexidade dos algoritmos recursivos. Isso é particularmente importante ao escrever um algoritmo no estilo "dividir e conquistar". Grosso modo, você pode usar o teorema mestre para obter a complexidade se souber a complexidade de cada "etapa" e o fator de ramificação.


1
por que é bom saber para programação?
Matt Ellen

@ MattEllen: Permite resolver relações de recorrência que podem ajudá-lo a encontrar a complexidade de algoritmos recursivos. Isso é particularmente importante ao escrever um algoritmo no estilo "dividir e conquistar". Grosso modo, você pode usar o teorema mestre para obter a complexidade se souber a complexidade de cada "etapa" e o fator de ramificação.
Tikhon Jelvis

1
  • álgebra
  • trigonometria
  • vetor (operações de matriz)
  • cálculo
  • [várias interpolações e seus derivados]
  • [superfícies, NURBS]

(aqueles entre parênteses são mais do tipo "aplicado")

É difícil dar orientações gerais, pois depende muito do campo em que você se encontra. Mas o exposto acima aborda o básico de vários graus de engenharia. Lembre-se de que essas categorias geralmente se sobrepõem (trigonometria + operações da matriz, cálculo + operações da matriz e assim por diante).

Eu sempre tenho um manual de matemática por perto. Muitas vezes, alguém não tem certeza de algo e ajuda a apresentá-lo de maneira organizada.


1

Conhecer álgebra booleana ajuda muito. Evita que você escreva códigos como

if (x < 10)
    return true;
else
    return false;

Não sei ao certo como a álgebra booleana ajuda a impedir que um usuário escreva isso? Você pode propor o que o usuário deve escrever lá? (Eu diria retorno x <10, mas pode ser confundido.)
Chris

1
Você está correto - deve retornar x <10. Pense desta maneira. A avaliação (x <10) retornará um resultado booleano. A instrução if se decompõe em [se x for realmente menor que 10] se (true) retornar true; ou [se x for maior que ou igual a 10] if (false) ... else return false;
Eric Olsson

2
O (x <10) pode estar separando dois casos de negócios. Com o formulário detalhado, você pode fazer mais do que apenas valores de retorno, que no modo de manutenção é muito bom, como você pode manter as alterações ao mínimo

1

Para problemas de otimização, é bom entender a probabilidade do log. Por exemplo, se você está tentando minimizar uma soma de quadrados, é o mesmo que maximizar o log da probabilidade, porque (grosso modo)

log( Product( exp( -(x[i]-mean)^2 )) )
  =
  - Sum( (x[i]-mean)^2 )

Outros favoritos no domínio do ajuste de desempenho são as distribuições Binomial e Beta. Eles são muito simples de calcular.

Se você coletar 10 amostras aleatórias do estado de um programa, e ele estiver em uma determinada condição por F = 40% do tempo, será como um experimento de sorteio com uma moeda injusta. O número de vezes que você a verá nessa condição é uma distribuição binomial com média 10 * 0,4 = 4 e desvio padrão de sqrt (10 * 0,4 * 0,6) = sqrt (2,4) = 1,55.

Por outro lado, se você pegar 10 amostras e vê-lo nessa condição em 4 amostras, o que isso diz sobre o tamanho de F? Os possíveis resultados são 0, 1, 2, 3, 4, ..., 9, 10. Essas são 11 possibilidades, e a possibilidade que você viu (4) é a quinta. Portanto, pegue 11 números aleatórios uniformes (0,1) e os ordene. A distribuição do quinto é a distribuição de F, uma distribuição Beta. Seu modo é 4/10. Sua média é 5/11. Sua variância é 5 * 6 / (11 ^ 2 * 12) = 0,021 e desvio padrão = 0,144.

Muitas pessoas pensam que é necessário um grande número de amostras para localizar problemas de desempenho de software e evitar encontrar falsos. Essas distribuições mostram que um pequeno número de amostras pode revelar muito sobre seu custo.


0

Isso pode ser um pouco simples, mas G=(V,E)é bom ter em mente. Em outras palavras, um gráfico é um conjunto de vértices e arestas. Os gráficos são muito úteis para representar muitas coisas.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.