Deje e dos números binarios con bits y el número binario (longitud 2 n ) del producto de x e y . Queremos calcular el bit más significativo z 2 n - 1 del producto z = z 2 n - 1 ... z 0 .
Para analizar la complejidad de esta función en el modelo de diagramas de decisión binarios (en particular, programas de ramificación de lectura única), trato de buscar algunas expresiones equivalentes para el caso . La primera cosa obvia es z 2 n - 1 = 1 ⇔ x ⋅ y ≥ 2 2 n - 1 (aquí x e y son los números enteros correspondientes a los números binarios). Quiero tener una intuición de lo que sucede si establezco algunos bits de entrada constantes. Por ejemplo, si configuro el bit de entrada más significativo de e y a 0 obtengo la función constante 0. Pero los bits con menor importancia no tienen tanta influencia en el resultado.
¿Hay otras expresiones equivalentes para el caso que ayuden más a ver qué sucede si corrijo algunos bits de entrada? ¿Existen métodos refinados para calcular el producto de dos números binarios que puedan ayudar? ¿O tienes algún otro enfoque para este problema?
Respuestas:
Una fuente interesante es DE Knuth: The Art of Computer Programming, Volume 4, Fascicle 1, Bitwise Tricks & Techniques; Diagramas de decisiones binarias , Addison-Wesley, Pearson Education 2009
En la página 96, hay un BDD para todos los bits de z = x⋅y, donde x e y tienen 3 bits. Muestra que, en el caso de 3 bits, BDD que representa el bit más significativo tiene 7 nodos no terminales. Vea la imagen a continuación, la he redibujado usando sus índices x = (x2, x1, x0) e y = (y2, y1, y0).
En la página 140 del libro de Knuth, hay una pregunta (n. ° 183) acerca de que BDD representa el bit más significativo para la multiplicación de dos números con infinitos bits (se llama "función de límite de bits líder"): esto es similar a lo que usted están buscando! La respuesta en la página 223 proporciona los primeros niveles del BDD resultante y discute el número de nodos en todos los niveles, pero desafortunadamente no proporciona un algoritmo para construir dicho BDD.
Fig. 1: El bit más significativo para la multiplicación de (x2, x1, x0) * (y2, y1, y0)
fuente