Quale algoritmo posso usare per descrivere un gradiente specificato (N / M) approssimativamente come la somma di un insieme di frazioni razionali {(n1 / m1) + (n2 / m2) ...}?
Limiti di design:
-
L'algoritmo prende come input
(N, M)
, descrivendo il vero gradiente N / M.- N e M sono numeri interi.
- Se è importante: M è in genere intorno a 100-1000.
- Se è importante: N varia ampiamente, da bassa (1, gradiente superficiale) fino a dimensioni arbitrariamente grandi (quintilioni, gradiente estremamente ripido che si avvicina alla verticale).
-
L'algoritmo produce come output un piccolo set di tuple,
{ (n1, m1), (n2, m2), …}
.- La combinazione di tuple (n, m), quando combinate come frazioni, si avvicina molto al gradiente N / M.
- Il numero di tuple dovrebbe essere piccolo (mi aspetterei meno di 3).
- Ogni
n
em
è un numero intero. - Ogni
m
è il più piccolo possibile, ma non inferiore al minimo per M (ad esempio 100).
Esempio
-
Dato l'input
(50001, 1000)
- l'algoritmo può generare il set
{ (5000, 100), (1, 1000) }
- perché (50001/1000) == ((5000/100) + (1/1000)).
- L'output è buono perché è un piccolo set e i denominatori sono bassi, pur rimanendo al di sopra del minimo.
- l'algoritmo può generare il set
-
Dato l'input
(14, 1000)
- l'algoritmo può generare il set
{ (1, 100), (1, 250) }
- perché (14/1000) == (1/100) + (1/250).
- L'output è buono perché è un piccolo set e i denominatori sono bassi, pur rimanendo al di sopra del minimo.
- l'algoritmo può generare il set
-
Dato l'input
(5.07e+30, 1000)
- l'algoritmo può generare il set
{ (5.07e+29, 100) }
- perché (5.07e + 30/1000) == (5.07e + 29/100).
- L'output è buono perché è un piccolo set e i denominatori sono bassi, pur rimanendo al di sopra del minimo.
- l'algoritmo può generare il set
Non so per certo che quelle siano le migliori uscite; ma soddisferebbero i criteri.
Le formule matematiche sono apprezzate ma non sono un math-literate
La mia algebra non è abbastanza strong per descrivere questo in generale. Allo stesso modo, non sono in grado di guardare una descrizione in linguaggio matematico e sapere quale algoritmo descrive; né sono in grado di dire se effettivamente risponde a questa domanda.
Grazie per riferimenti come
ecc., ma non posso tradurlo in pseudo-codice per un algoritmo. Per favore suggerisci qualche pseudo-codice in una risposta, così posso capire se sta facendo quello che ho descritto.