La gran complejidad de una declaración de interruptor no es realmente el punto importante. La notación de Big-O se refiere al rendimiento cuando n aumenta hacia el infinito. Si tiene una declaración de cambio lo suficientemente grande como para que el rendimiento asintótico sea un problema, entonces es demasiado grande y debe ser refactorizado.
Además del problema de legibilidad, en Java y C# creo que pronto alcanzaría algunos límites internos para el tamaño máximo de un único método.
Para las sentencias de conmutación relativamente pequeñas que se invocan a menudo, probablemente sería más informativo medir el rendimiento real de la instrucción switch frente a otros enfoques que podría utilizar en su lugar. Esta medición podría realizarse realizando repetidamente la operación en un bucle.
Para declaraciones de cambio más grandes, sugiero refactorizar para usar un diccionario o estructura de datos similar que tenga aproximadamente O (1) rendimiento incluso si n es muy grande y no tendrá problemas con el tamaño limitado del método.
La respuesta no es solo específica del lenguaje, ni siquiera es específica del compilador. Depende del código real. Algunos compiladores convierten algunas sentencias de cambio en tablas de salto. –
En el otro extremo, los valores pueden hacer que se invoquen otras funciones. En Ruby, por ejemplo, los valores se verifican usando el operador '===', que puede hacer cualquier cosa. Un uso común de esto son las expresiones regulares, que (en ciertos casos) pueden ser muy costosas, por lo que el costo del cambio está dominado por los propios valores, no por la cantidad que hay. – Ken
¿Hay alguna situación en la que podría ser * mayor * que O (n) (para * n * casos en el interruptor)? – FrustratedWithFormsDesigner