¿Por qué la resta es la que consume menos tiempo? (La pregunta contiene una suposición incorrecta)

¿Era ese libro muy viejo? ¿De qué arquitectura estaba hablando? RISC? CISC?

De todos modos, aparte de eso, la resta y la suma deberían tomar la misma cantidad de tiempo. Cada arquitectura que se me ocurre tiene una instrucción incorporada para sumar y restar. Además, el hertz de su procesador determina cuánto tiempo tardan las instrucciones. Cada instrucción no es necesariamente un solo ciclo de reloj, pero tengo problemas para imaginar por qué un circuito tomaría un número diferente de ciclos para sumar y restar.

La única razón por la que podría pensar que la resta está optimizada para ser un poco más rápida que la suma es porque se espera que se use para implementar la igualdad. Cuando compara dos números, las instrucciones comunes son cargar a y b en los registros, restar b de a y poner eso en un registro, y luego mover el contador del programa si el registro resultante es cero. La alternativa es cargar a y b, xor a y b, luego mover el contador del programa si el registro es cero. Pero realmente depende de si la instrucción XOR o SUB toma menos ciclos en la arquitectura actual, de lo contrario no hay razón para preocuparse.

Entonces, básicamente, tal vez hay algunas arquitecturas donde este es el caso. Pero solo hará la más mínima diferencia si está trabajando con ensamblaje y de alguna manera podría sustituir la suma por la resta en su algoritmo.

No puedo imaginar un diseño en el que esto sea cierto. La suma y la resta siempre se realizan por el mismo circuito sumador. La única diferencia es que el sustraendo es negado (cambio de signo) antes de ser agregado al minuendo. La negación no consume tiempo, por lo que la suma y la resta toman el mismo número de ciclos de reloj.

La multiplicación tiende a tomar más tiempo, especialmente si la circuitería es simple y usa un ciclo de reloj por bit a medida que se desplaza y agrega, es decir, una multiplicación de 16 × 16 bits puede requerir 16 ciclos. Los diseños modernos acortan eso con circuitos multiplicadores “flash” que son básicamente cambiadores y sumadores encadenados.

La división generalmente toma un número variable de ciclos porque es un proceso iterativo en el que los fragmentos de bits se restan del extremo izquierdo (más significativo) del dividendo hasta que llega a cero.

Ese texto parece ser un poco engañoso. Hasta donde yo sé, la suma y la resta son exactamente igual de rápidas en la mayoría de las arquitecturas. De hecho, la sustracción y la suma pueden implementarse exactamente de la misma manera, excepto que para la sustracción todos los bits de entrada se invierten (y el acarreo debe inicializarse de manera diferente).

La multiplicación y la división requieren algoritmos más complicados, y no se pueden implementar exactamente de la misma manera, por lo que es cierto que la división suele ser más lenta que la multiplicación.

La resta es en realidad suma con el complemento de dos.
Tanto la suma como la resta tienen la misma complejidad, O (log N).
La división y la multiplicación son O (n ^ 2) aunque la multiplicación se puede mejorar.
La complejidad real es División – Multiplicación – suma y resta

Lo más probable es que haya sido una mala elección de palabras en el libro.

More Interesting

¿Cuáles son las explicaciones sobre las notaciones asintóticas con ejemplos de algoritmos?

¿Qué algoritmo es mejor para datos no estructurados?

¿Cómo puedo encontrar la ruta más larga de un gráfico bidireccional utilizando el algoritmo BFS?

¿Qué tipo de operaciones podrían aplicarse sobre un árbol de segmentos?

¿Cuál es el punto de los algoritmos gráficos?

¿Cuáles son los algoritmos de búsqueda paralelos más importantes? ¿Qué ventajas tienen sobre los algoritmos de búsqueda clásicos?

No puedo entender algoritmos y estructuras de datos. ¿Cómo puedo aprender algoritmos y estructuras de datos de una manera simple?

¿Cuáles son las aplicaciones de la programación en C?

Si quiero resolver problemas del mundo real, ¿qué debo hacer, encontrar esos problemas y luego aprender las estructuras de datos y algoritmos requeridos o viceversa?

¿Cuál sería la mejor estrategia de negociación algorítmica simple?

Matemáticas generales que uno debe saber antes de tomar la clase de algoritmo? Especialmente para estudiantes con antecedentes no informáticos.

¿Cómo debo usar el libro Introducción a los algoritmos de Cormen de manera efectiva? ¿Es mejor elegir un tema que haya encontrado en algún lugar de la programación competitiva y leer un algoritmo relacionado con eso o revisarlo de principio a fin?

Algoritmos: ¿Cómo decide si usar BFS o DFS para un problema en particular?

¿Cuál es el código más elegante que puede escribir en su lenguaje de programación favorito que imprima los números del 100 al 200?

¿Qué es el algoritmo de sincronización YAWNS?