Foi-me atribuída a tarefa de comparar um par de três variáveis duplas positivas, enquanto ignorava sua ordem, em Java. Eu fiz o seguinte:
if ((a1 == a2 && b1 == b2 && c1 == c2) ||
(a1 == a2 && b1 == c2 && c1 == b2) ||
(a1 == b2 && b1 == a2 && c1 == c2) ||
(a1 == b2 && b1 == c2 && c1 == a2) ||
(a1 == c2 && b1 == a2 && c1 == b2) ||
(a1 == c2 && b1 == b2 && c1 == a2))
// if true
Ouvi do professor que existe uma maneira matemática de comparar esse par de três números.
Até agora, tentei comparar sua adição, subtração e a soma de seu poder por 2, mas sempre achei um caso em que o par era diferente e a afirmação era verdadeira.
Alguma ideia?
EDITAR:
Já enviei a tarefa e a professora disse que minha resposta era verdadeira. Estou perguntando por curiosidade.
Respostas:
TL; DR
Compare a soma de cada trigêmeo, o produto de cada trigêmeo e a soma dos produtos de todas as combinações possíveis de cada trigêmeo.
O âmago da questão
Pelo Teorema Fundamental da Álgebra , para um polinômio de grau N, devemos ter N raízes.
Usando esse fato, deixamos nossos zeros
a1, a2, and a3
. Agora, encontramos os coeficientes desse polinômio.Se dois polinômios são equivalentes, eles devem ter as mesmas raízes (novamente pelo TLC). Portanto, tudo o que precisamos fazer é comparar os coeficientes dos polinômios gerados.
Então se,
E
E
Então podemos concluir os trigêmeos
a1, a2, a3
eb1, b2, b3
são equivalentes.Vale a pena?
Do ponto de vista prático, vamos ver se isso é realmente mais eficiente do que a verificação de força bruta, conforme ilustrado pelo OP.
Primeira verificação: soma e comparação. Isso requer 4 adições no total e 1 verificação de igualdade.
Segunda verificação: Produto, Soma e Comparação. Isso requer 6 multiplicações totais, 4 adições totais e 1 verificação de igualdade.
Terceira verificação: produto e comparação. Isso requer 4 multiplicações totais e 1 verificação de igualdade.
Adicionando as duas operações AND lógicas, o número total de operações binárias para os "coeficientes da abordagem polinomial gerada" requer apenas:
A verificação de força bruta requer 18 verificações totais de igualdade, 12 comparações lógicas E e 5 comparações lógicas OU para um total de:
Então, estritamente falando , a resposta é sim, os "coeficientes da abordagem polinomial gerada" são realmente mais eficientes. No entanto, como o @WJS aponta, a abordagem de força bruta tem muito mais oportunidades para curtos-circuitos e, portanto, é executada com mais eficiência do que a abordagem matemática.
Para uma completa integridade
Não podemos deixar de verificar a soma dos produtos de todas as combinações possíveis de cada trigêmeo. Se deixarmos isso de fora, há inúmeros exemplos em que isso falha. Considere
(23, 32, 45)
e(24, 30, 46)
* :Eles não são equivalentes, mas fornecem a mesma soma e produto. No entanto, eles não fornecem a mesma soma dos produtos de todas as combinações possíveis:
* Caso alguém esteja curioso para obter um exemplo semelhante ao exemplo acima, primeiro gere todas as partições inteiras de um número M de comprimento 3, pegue seu produto, encontre as duplicatas e escolha um par.
fonte
Se você pode classificar (a1 <= b1 <= c1 e a2 <= b2 <= c2), tente comparar 2 ^ a1 * 3 ^ b1 * 5 ^ c1 com 2 ^ a2 * 3 ^ b2 * 5 ^ c2 (usando os números primos 2, 3, 5 como base)
fonte
if
declaração eif
escrever a maneira matemática de compará-las, sem classificar.