“Conocimiento Programación>Lenguajes De Programación

¿Cuál es la complejidad del tiempo de una declaración IF en un lenguaje de programación?

2013/8/29
La complejidad del tiempo de una declaración `if` es generalmente o (1) , pero con algunas advertencias importantes. Aquí hay un desglose:

La idea central:tiempo constante

* La ramificación es rápida: La operación primaria en una declaración `if` está evaluando la condición y decidir qué rama ejecutar. Este es un proceso muy rápido y determinista que implica una comparación única (o una serie de operaciones booleanas que pueden considerarse limitadas). Los procesadores modernos están altamente optimizados para la ramificación condicional.

* Independiente del tamaño de entrada: La decisión de ejecutar el bloque `if` o el bloque` else` (o ninguno de si no hay 'else') no depende del tamaño de los datos de entrada procesados ​​por el algoritmo circundante. Solo depende de la condición en sí.

por qué o (1) puede ser engañoso (¡el contexto importa!)

Mientras que la declaración `if` * en sí * es o (1), el * código * dentro del bloque` if` `else` puede tener complejidad de tiempo. Esto es crucial. Considere estos escenarios:

1. o (1) if-bloque:

`` `Python

Si x> 5:

y =10 # O (1) Asignación

z =x + y # o (1) adición

demás:

y =20 # O (1) Asignación

`` `` ``

En este caso, la declaración `if` y el código dentro de * ambas * ramas son O (1). La complejidad general de este fragmento es O (1).

2. o (n) if-bloque:

`` `Python

Si len (my_list)> 0:

para i en rango (len (my_list)):# o (n) bucle

imprimir (my_list [i])

demás:

Imprimir ("Lista está vacía") # O (1)

`` `` ``

Aquí, si la condición es verdadera, ejecuta un bucle que itera a través de `my_list`, haciendo la complejidad de la rama` if` o (n). Si la condición es falsa, ejecuta el código O (1). La complejidad * peor * de todo este bloque de código es o (n), porque la declaración `if` podría llevar a ejecutar el código O (n).

3. o (n^2) if-block:

`` `Python

Si la condición:

para i en el rango (n):

para j en rango (n):

# Algunos O (1) operación

aprobar

demás:

# O (1) Operación

aprobar

`` `` ``

En este ejemplo, la complejidad del tiempo se convierte en O (n^2) debido a los bucles anidados dentro de la declaración `if`, a pesar de que la evaluación de la condición` if` todavía está (1).

en resumen

* La lógica de ramificación de la declaración `if` es O (1).

* La complejidad del tiempo general del código que contiene la declaración `if` depende completamente de la complejidad del código * interior * los bloqueos` if` y `else`. . El bloque con la mayor complejidad dominará.

* Al analizar los algoritmos, debe considerar el peor de los casos, lo que generalmente implica el bloque `if` con la mayor complejidad que se está ejecutando.

Por lo tanto, si bien puede decir que la declaración `` ` * en sí misma * lleva tiempo constante, debe Analice el código dentro de las ramas para determinar la verdadera complejidad del tiempo del bloque de código que contiene el `if`. Concéntrese en el término dominante (el bloque de código que tardará más en ejecutar a medida que crece el tamaño de entrada).

Lenguajes De Programación
La diferencia entre SOAP y REST Web Service
¿Cuál es la diferencia entre Visual Studio y Visual Studio NET
¿Es posible crear un lenguaje de programación que esté completo, lo que significa que puede simular cualquier algoritmo o cálculo ser realizado por la máquina?
¿Cómo puedo guardar un archivo en Xcode
Cómo cambiar los márgenes del marco Uso de la programación HTML
¿Qué es un paquete de computadora que usa ejemplos y funciones?
Cómo programar una dirección de puerto
Cómo quitar la Ruta Desde el ODM
Conocimiento de la computadora © http://www.ordenador.online