Dado e ,
Minhas perguntas são:
Dado
- Supondo que podemos decidir em , existe alguma maneira de decidir sem ter que pré-executar as multiplicações (ou divisões), e . Ou existe algum tipo de prova de que não há como.
- Existe um método mais rápido para comparar números racionais do que multiplicar os denominadores.
algorithms
integers
Realz Slaw
fonte
fonte
Respostas:
Minha pesquisa atual:
Tentativa inicial de algumas regras gerais
Pode-se tentar fazer algumas regras gerais para resolver a comparação racional:
Supondo que todos os positivos :a,b,c,d
Outra regra:
Penso nessa regra como lógica, pois quanto maior o denominador, menor o número, enquanto maior o numerador, maior o número. Portanto, se o lado esquerdo tiver um denominador maioreum numerador menor, o esquerdo será menor.
Daqui em diante, assumiremos que , porque, caso contrário, podemos resolvê-lo com as regras acima ou reverter a questão para ca<c∧b<d , e acabamos com essa condição de qualquer maneira.cd<?ab
Regras :
Esta regra permite subtrair o numerador e o denominador à esquerda do numerador e denominador à direita para um problema equivalente.
E é claro que há dimensionamento:
Usando essas regras, você pode brincar com as coisas, aplicá-las repetidamente, em combinações inteligentes, mas há casos em que os números são próximos e patológicos.
Ao aplicar as regras anteriores, você pode reduzir todos esses problemas para: um
Às vezes você pode resolver isso diretamente agora, às vezes não. Os casos patológicos geralmente estão na forma:
Então você vira e resulta na mesma coisa, apenas com um pouco menos. Cada aplicação das regras + flip reduz em um dígito / bit. AFAICT, você não pode resolvê-lo rapidamente, a menos que aplique as regras vezes (uma vez para cada dígito / bit) no caso patológico, negando sua aparente vantagem.O(n)
Problema em aberto ??
Percebi que esse problema parece ser mais difícil do que alguns problemas atuais em aberto.
Um problema ainda mais fraco é determinar:
E ainda mais fraco:
Esse é o problema aberto de verificação da multiplicação . É mais fraco, porque se você tivesse uma maneira de determinar , então você pode facilmente determinar a d ? = b c , testando usando o algoritmo duas vezes, a d ? < b c , b c ? < a d . Iff tanto é verdade, você sabe que um d ≠ b c .ad<?bc ad=?bc ad<?bc bc<?ad ad≠bc
Agora, era um problema em aberto, pelo menos em 1986:ad=?c
Muito interessante, ele também mencionou a questão de verificar a multiplicação da matriz :
Isso já foi resolvido e é realmente possível verificar em tempo com um algoritmo aleatório (com n × n sendo o tamanho das matrizes de entrada, portanto, é basicamente o tempo linear no tamanho da entrada ) Gostaria de saber se é possível reduzir a multiplicação inteira à multiplicação de matrizes, especialmente com suas semelhanças, dadas as semelhanças da multiplicação inteira de Karatsuba com os algoritmos de multiplicação de matrizes que se seguiram. Então, talvez, de alguma forma, possamos alavancar o algoritmo de verificação de multiplicação de matrizes para multiplicação de números inteiros.O(n2) n×n
Enfim, uma vez que este ainda é, que eu saiba, um problema aberto, o problema mais forte de está certamente aberto. Estou curioso para saber se a solução do problema de verificação de igualdade teria alguma influência no problema de verificação de desigualdade de comparação.ad<?cd
Uma pequena variação do nosso problema seria se as frações fossem reduzidas aos termos mais baixos; Nesse caso, é fácil saber se . Isso pode ter alguma influência na verificação comparativa de frações reduzidas?ab=?cd
Uma pergunta ainda mais sutil, e se tivéssemos uma maneira de testar , seria este estender-se a testar um d ? = c ? Não vejo como você pode usar isso "nos dois sentidos", como fizemos para um d ? < c d .ad<?c ad=?c ad<?cd
Palavras-chave:
Reconhecimento aproximado de idiomas não regulares por autômatos finitos
Eles trabalham na multiplicação aproximada e na verificação aleatória, que eu não entendo completamente.
fonte
Aqui está uma tentativa muito parcial de reprovação. Suponha-se que pode fazer uso de uma única (número constante de) adições e subtracções em nosso decisor, bem como um número constante de wrt predefinido números. Em outras palavras, podemos fazer um número constante de m o d 2 , m o d 3 , etc, em nosso decisor. Então as únicas quantidades que podemos calcular são da forma q = k 1 a + k 2 b + k 3 c + k 4 d = ∑ kmod mod 2 mod 3 onde o k s' são predefinidos constantes. Note que q pode ser calculado no tempo O ( ∑ | a | ) .q=k1a+k2b+k3c+k4d=∑kia k q O(∑|a|)
(Como tornar isso mais preciso?) A distância do cuboide à superfície é geralmente ilimitada e, portanto, a superfície não pode ser calculada pelo decisor
fonte
Boa pergunta. Você aceitaria nível de confiança?
Talvez faça divisão aproximada. Ou seja,
Para calcular os quocientes aproximados delimitadores de a / b, mova à direita a pelo teto (log_2 (b)) e também pelo piso (log_2 (b)). Então, sabemos que o quociente exato está entre esses dois valores.
Então, dependendo dos tamanhos relativos dos quatro números inteiros, é possível descartar certos casos e obter 100% de confiança.
Pode-se repetir o procedimento para radix diferente de 2 e, por uma sucessão de tais operações, aumentar o nível de confiança, até que uma mudança de sinal / desempate seja observada de alguma forma?
Esse é o meu primeiro rascunho de um método.
fonte
Certo.
Idéia: compare a expansão decimal pouco a pouco.
A única parte desagradável é que temos que excluir a igualdade primeiro porque, caso contrário, não podemos terminar.
É útil comparar primeiro as partes inteiras, porque isso é fácil.
Considere isto:
Observe que o
do-while
loop precisa terminar, pois os números são desiguais. Porém, não sabemos quanto tempo isso dura; se os números estiverem muito próximos, pode demorar um pouco.Isso é rápido? Provavelmente não. Existem muitas divisões inteiras, módulos
gdc
es para calcular, e temos um loop cujo número de iterações é inversamente proporcional à distância entre os números que comparamos.O método auxiliar:
fonte