11 votos

Mínimo $ab$ para Número Racional $a/b$ en un intervalo

Dados números racionales $L$ y $U$ , $0<L<U<1$ encuentra el número racional $M=a/b$ tal que $L \le M<U$ y $(a\times b)$ es lo más pequeño posible $a$ y $b$ son números enteros. Por ejemplo,

  • Si $L=66/101$ y $U=19/29$ entonces $M=17/26$ .
  • Si $L=66/101$ y $U=19/28$ entonces $M=2/3$ .

Ahora mismo estoy usando una búsqueda ingenua que es exponencial en complejidad. ¿Existe un método mejor?

Si sirve de ayuda, se puede suponer la factorización en primos del numerador y del denominador de $U$ y $L$ son conocidos.

3 votos

$$\frac{66}{101} < \frac{17}{26} < \frac{19}{29}$$ No creo que la factorización en primos ayude, pero sí la expansión continua de fracciones.

0 votos

@DanielFischer Gracias. He corregido el error.

5voto

Vincent Puntos 5027

Basta con encontrar el menor $b$ y, a continuación, el más pequeño posible $a$ dado $b$ . Esto no es del todo obvio, así que intentaré demostrarlo:

Supongamos que tenemos números enteros positivos $a,b$ tal que

(i) $b$ es el menor denominador de todas las fracciones en $[L,U)$ y

(ii) $a/b$ es el múltiplo más pequeño de $1/b$ en $[L,U)$ .

Esto significa que $(a-1)/b < L \le a/b$ y así $a-1<bL\le a$ .

N enteros $c,d$ tal que $c/d \in [L,U)$ y $cd < ab$ . Entonces $b < d$ , por (i), por lo que $bL < dL$ . (El caso $b=d$ i tendríamos $c \ge a$ por (ii), y por tanto $cd \ge ab$ .)

Pero ahora tenemos $a-1 < bL < dL \le c$ porque $c/d \ge L$ .

Por lo tanto $a < c$ que junto con $b < d$ nos da $ab < cd$ , contradiciendo nuestra suposición.

Y para encontrar el menor denominador en un intervalo $[L,U)$ basta con calcular las fracciones continuas de $L$ y $U$ y truncarlos en la primera posición en la que difieran. Sus ejemplos:

$66/101 = [0;1,1,1,7,1,3]$
$19/29 = [0;1,1,1,9]$
Así que la respuesta es $[0;1,1,1,8] = 17/26$

$66/101 = [0;1,1,1,7,1,3]$
$19/28 = [0;1,2,9]$
Así que la respuesta es $[0;1,2] = 2/3$

En realidad no es muy tan simple como eso, porque las fracciones continuas oscilan alrededor de su convergente, en lugar de converger monotónicamente. Pero puedes buscar en Google "fracciones continuas" para conocer los detalles.

5voto

Hagen von Eitzen Puntos 171160

Según la respuesta de TonyK, sólo es necesario encontrar el denominador más pequeño para el que una fracción en $[L,U)$ existe. Para evitar lo que él llama oscilaciones "desordenadas", podemos proceder del siguiente modo:

  1. Comience con $(a,b,c,d)=(0,1,1,1)$ .
  2. *[Observación: Tenemos $\frac ab<L<U\le \frac cd$ y $ad-bc=-1$ y cualquier fracción entre $\frac ab$ y $\frac cd$ tiene denominador $\ge b+d$ ]* $\quad$ Sea $u\leftarrow a+c$ , $v\leftarrow b+d$ .
  3. Si $u<Lv$ , dejemos que $a\leftarrow u$ , $b\leftarrow v$ y vaya al paso 2
  4. Si $u\ge Uv$ , dejemos que $c\leftarrow u$ , $d\leftarrow v$ y vaya al paso 2.
  5. Hemos encontrado $M=\frac uv$ cuyo producto $uv$ es mínima. Terminar

1 votos

Qué bien. Si alguien quiere comprobar esto más a fondo, deben comenzar con Secuencias Farey .

0 votos

Otra fuente de lectura adicional es el Árbol Stern-Brocot mediant / búsqueda binaria ; la respuesta anterior es idéntica, salvo que inicializa la búsqueda en [0,1) y no en el rango [0,Infinito) del árbol completo.

1voto

Jeff Puntos 4795

¿Por qué su algoritmo es exponencial?

Aquí hay una opción: No pienses en los números como fracciones, sino como pares. Tu objetivo es encontrar el par $(a,b)$ tal que $L\leq a/b\leq U$ tal que $a\times b$ es mínima. En este caso, NO reducimos fracciones.

Para un $b$ podemos encontrar fácilmente el $a$ que cumpla las condiciones calculando $a=\lceil bL\rceil$ . (Debe comprobarlo: Si $bL\in\mathbb{Z}$ utilice $a+1$ y compruebe también que $a/b<U$ .) Este $a$ da el mejor par posible con denominador $b$ (cualquier cosa más grande tiene un $a$ -valor).

Utilizando el mejor mínimo hasta el momento, sigue calculando hasta que tu denominador alcance este valor. Una condición de parada débil viene dada por la fracción $\frac{1}{2}(L+U)$ que sabes que está en el intervalo.

0 votos

¿Cómo elegir $b$ ? ¿Cómo se elige el siguiente valor de $b$ ? Probando todos los valores posibles de $b$ es exponencial en complejidad. ¿Quizá me he perdido algo en su respuesta?

0 votos

¿Cómo se mide la complejidad? ¿Exponencial en términos de qué?

0 votos

Exponencial en número de operaciones con respecto al número de bits utilizados para representar $U$ y $L$ . Esta es la medida normal de complejidad. Por ejemplo, encontrar un factor de $n$ probando $O(\sqrt{n})$ posibles divisores es exponencial, ya que $n$ tiene $\log_2 n$ bits.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X