stringtranslate.com

Sucursal multivía

La rama multidireccional es el cambio en el flujo de control de un programa basado en un valor que coincide con un criterio seleccionado. Es una forma de declaración condicional . Una rama multidireccional suele ser el método más eficaz para pasar el control a una de un conjunto de etiquetas de programa , especialmente si se ha creado un índice de antemano a partir de los datos sin procesar .

Ejemplos

Alternativas

Con frecuencia, una rama multidireccional se puede reemplazar con una búsqueda eficiente en una tabla indexada (utilizando el valor de los datos en sí o una derivada calculada del valor de los datos, como índice de una matriz ) [1]

" ...la implementación de una declaración de cambio se ha equiparado con la de una rama multidireccional. Sin embargo, para muchos usos de la declaración de cambio en código real, es posible evitar la bifurcación por completo y reemplazar el cambio con una o más apariencias de tabla. -ups Por ejemplo, el Has30Daysejemplo [presentado anteriormente] se puede implementar de la siguiente manera:[Ejemplo C]"

"Un análisis de superoptimizador de la generación de códigos de sucursales multidireccionales" por Roger Anthony Sayle

 switch ( x ) { /* x es el número de mes */ caso 4 : /* abril */ caso 6 : /* junio */ caso 9 : /* septiembre */ caso 11 : /* noviembre */ return true ; }                   

se puede reemplazar, utilizando una técnica de "hashing seguro", con -

 int sin signo t = x | 2 ; cambiar ( t ) { caso 6 : caso 11 : devolver verdadero ; }                

o se puede reemplazar, utilizando una búsqueda en la tabla de mapeo de índice , con -

 x %= 12 ; /* para garantizar que x esté en el rango 0-11*/ static const int T [ 12 ] = { 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 }; /* tabla basada en 0 'si 30 días =1, de lo contrario 0' */ return T [ x ]; /* regresa con booleano 1 = verdadero, 0=falso */             

(en vista de la simplicidad del último caso, sería preferible implementarlo en línea, ya que la sobrecarga de usar una llamada a función puede ser mayor que la búsqueda indexada en sí).

Cotizaciones

La bifurcación multidireccional es una técnica de programación importante que con demasiada frecuencia se reemplaza por una secuencia ineficiente de pruebas if. Peter Naur me escribió recientemente que considera el uso de tablas para controlar el flujo de programas como una idea básica de la informática que casi ha sido olvidada; pero espera que esté listo para ser redescubierto en cualquier momento. Es la clave de la eficiencia en todos los mejores compiladores que he estudiado.

—  Donald Knuth , Programación estructurada con ir a Declaraciones

Ver también

Referencias

  1. ^ "Copia archivada" (PDF) . Archivado desde el original (PDF) el 27 de febrero de 2012 . Consultado el 18 de noviembre de 2009 .{{cite web}}: Mantenimiento CS1: copia archivada como título ( enlace )

enlaces externos