Pregunta

Estaba navegando por esta pregunta y algunas similares:

Obtener una subrainal de una matriz existente

Muchos lugares que leo respuestas como esta:

Obtener una subrainal de una matriz existente

Lo que me pregunto es por qué omitir y tomar no son operaciones de tiempo constantes para matrices.

A su vez, si eran operaciones de tiempo constantes, ¿no se omitir y tomar el método (sin llamar a toArray () al final) tendrá el mismo tiempo de ejecución sin la sobrecarga de hacer una matriz.copy, pero también más eficiente en el espacio?

¿Fue útil?

Solución

Tienes que diferenciar entre el trabajo que el Skip y Take Los métodos lo hacen y el trabajo de consumir los datos que devuelven los métodos.

los Skip y Take Los métodos mismos son operaciones O (1), ya que el trabajo que realizan no escala con el tamaño de entrada. Acaban de configurar un enumerador que es capaz de devolver elementos de la matriz.

Es cuando usas el enumerador que el trabajo está hecho. Esa es una operación O (n), donde n es el número de elementos que produce el enumerador. A medida que los enumeradores leen de la matriz, no contienen una copia de los datos, y debe mantener los datos en la matriz intactos siempre que esté utilizando el enumerador.

(Si utiliza Skip En una colección que no se puede acceder por índice como una matriz, obtener el primer elemento es una operación O (n), donde n es el número de elementos omitidos).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top