Definición del orden de crecimiento de Reynolds & Tymann

47

Estoy leyendo un libro llamado Principios de informática (2008), de Carl Reynolds y Paul Tymann (publicado por Schaum's Outlines).

El segundo capítulo presenta algoritmos con un ejemplo de búsqueda secuencial que simplemente itera a través de una lista de nombres y devuelve VERDADERO si se encuentra un nombre en la lista.

El autor continúa diciendo (página 17):

Decimos que el "orden de crecimiento" del algoritmo de búsqueda secuencial es n. La notación para esto es T (n). También decimos que un algoritmo cuyo orden de crecimiento está dentro de un factor constante de T (n) tiene un theta de NL, por ejemplo. "La búsqueda secuencial tiene una theta de n". El tamaño del problema es n, la longitud de la lista que se busca.

Encuentro esto realmente difícil de seguir. El libro está lleno de errores, por lo que no estoy seguro de si me falta algo o si hay un error tipográfico en el párrafo anterior. En inglés general, rara vez veo que una oración termine con "... digamos".

Estoy muy confundido.

¿Qué significa T? El libro no explica. ¿Es por tiempo o por Theta?

Si "una theta de NL" significa "La búsqueda secuencial tiene una theta de n". ¿Qué significa L? ¿'Lineal' o 'largo'?

He escrito a los editores pidiendo una explicación. Dijeron que enviarían mi mensaje a los autores. No han respondido. También he intentado buscar otras fuentes, pero todavía tengo la sensación de que estoy malinterpretando algo, así que no puedo descansar hasta que haya descifrado este párrafo.

Si alguien tiene una copia de ese libro, y ha entendido ese párrafo. Entonces, agradecería que me hiciera saber si ese párrafo es exacto o explicarlo en otras palabras. Gracias.

JW
fuente
Complejidad de tiempo T (n), de Wikipedia : "Dado que el tiempo de rendimiento de un algoritmo puede variar con diferentes entradas del mismo tamaño, uno usa comúnmente la complejidad de tiempo del peor de los casos de un algoritmo, denotado como T (n), que se define como la cantidad máxima de tiempo que se tarda en cualquier entrada de tamaño n. Menos común, y usualmente especificada explícitamente, es la medida de la complejidad del caso promedio. Las complejidades de tiempo se clasifican por la naturaleza de la función T (n). Por ejemplo, un algoritmo con T (n) = O (n) se llama algoritmo de tiempo lineal y [...] "
Stefan
1
Creo que es este libro y, además de la revisión no estelar que acabo de dejar, hoy hay otra fecha, ¡que probablemente no sea una coincidencia!
Jason C
Ese uso de say se siente como la definición menos utilizada: asumir o suponer. Piense en ello como "..., digamos". Todavía no estoy seguro de que esa oración tenga sentido.
Roger Krueger

Respuestas:

77

El párrafo está mal. Desafortunadamente, se ve exactamente como el tipo de cosas que un estudiante que no entiende el material escribiría como respuesta a un ejercicio. Este tipo de tonterías no tiene cabida en un libro de texto. No hagas movimientos bruscos. Baja el libro. Aléjate del libro.

Decimos que el "orden de crecimiento" del algoritmo de búsqueda secuencial es n. La notación para esto es .T(n)

No. es la notación para una función llamada , que toma un argumento llamado . Esa función podría usarse para significar cualquier cosa. Existe una tradición de escribir relaciones de recurrencia para el tiempo de ejecución de los programas en la forma, por ejemplo, Pero no es un "orden de crecimiento", aquí: es una función específica definida a través de una relación de recurrencia. Y no puede simplemente escribir " " y esperar que las personas lean su mente y sepan que la función  denota el tiempo de ejecución de algún algoritmo.  aquí representa el tiempo.T(n)Tn

T(1)=kT(n)=T(n1)+lognfor n>1
TT(n)=blahTT

También decimos que un algoritmo cuyo orden de crecimiento está dentro de un factor constante de tiene un theta de NL, por ejemplo. "La búsqueda secuencial tiene una theta de ".T(n)n

Esto obviamente ha sido destrozado. Creo que los autores intentaron escribir algo como,

También decimos que un algoritmo cuyo orden de crecimiento está dentro de un factor constante de tiene un theta de y decimos: "La búsqueda secuencial tiene un theta de ".T(n)nn

Pero, por favor, no decimos "tiene una theta de ", así como, si es tu notación de altura, no dirías "John tiene una de 180 cm". Simplemente no es una forma correcta de palabras. De hecho, decimos: "El tiempo de ejecución del algoritmo es theta  (o theta of  )". Tenga en cuenta, en particular, que es una herramienta para hablar de funciones matemáticas, no de algoritmos. Theta no significa que el tiempo de ejecución sea algo; más bien, es algo que puede usar para hablar sobre el tiempo de ejecución.nhhnnΘ

"NL", por cierto, denota el espacio de registro no determinista de la clase de complejidad , lo que no tiene ningún sentido en la posición que apareció en la cita original.

David Richerby
fuente
12
El primer párrafo me hizo sonreír porque es exactamente el tipo de cosas que la policía de informática te diría :-) (+1 también, esta es una buena respuesta).
Juho
3
Muchas gracias por tu explicación. De hecho, es muy útil y ahora siento que lo entiendo un poco mejor (o, al menos, no siento angustia en mi cerebro por no entender ese párrafo). Me puedo relajar ahora.
JW.
2

Parece que el autor está tratando de explicar la notación Big O , pero la renombró sin ninguna razón en particular y destrozó el texto por completo.T

Para una buena descripción de la notación Big O (así como de little-o y Theta), recomiendo el libro MIT Introducción a los algoritmos del profesor Leiserson.

Parece que una distinción importante es que refiere a la complejidad total de un algoritmo, que generalmente es tiempo , espacio o ambos. (por ejemplo, algunos algoritmos se ejecutan más lentamente con conjuntos de datos más grandes; algunos requieren más espacio de almacenamiento con datos más grandes; y algunos requieren más tiempo y más espacio) .Onotation

Parece que esta refiere solo a la medición del tiempo de un algoritmo y no tiene en cuenta los requisitos de almacenamiento.Tnotation

abelenky
fuente
1
No parece que estén tratando de explicar la gran O, hablan explícitamente de theta.
David Richerby
El texto del profesor Leiserson describe específicamente a Theta como una variación más precisa de BigO. Me doy cuenta de que puede haber otras definiciones de Theta, pero el theta relacionado con BigO es el que conozco.
abelenky
2
No creo que esto sea lo que está pasando. En cambio, sospecho que es el descuido común escribir "T (n) = n" y asumir (sin decirlo explícitamente) que todos inferirán que T (n) se refiere a un tiempo de ejecución, y específicamente al tiempo de ejecución del algoritmo tener en cuenta, yn se refiere al tamaño de la entrada.
DW