Tengo una sección en mi código donde sé que necesitaré una matriz, y sé exactamente cuántos elementos necesitará esa matriz. Esta sección de código se repetirá mucho, por lo que podría obtener un gran ahorro de tiempo inicializando primero ese conjunto al tamaño que sé que necesitará y luego llenándolo solo presionando ítems (presionar sería O (n) en lugar de llenar espacios ya creados, que serían O (1)).¿Puedo inicializar una matriz a un tamaño dado en Perl?
Dicho esto, parece que no puedo encontrar ninguna forma elegante de inicializar una matriz a un tamaño determinado, y no tengo ni idea de por qué. Sé que puedo hacer:
my @array; $array[49] =0;
para obtener una matriz 50 artículo, pero que se ve muy feo para mí y me siento como si tiene que haber una mejor manera. Ideas?
No hay nada malo con arreglos preasignados, pero esto huele a una optimización prematura y micro-optimización. ¿Por qué crees que 'push' es O (n)? – mob
No hay tiempo para encontrar un enlace en este momento, pero larga historia corta: empujando requiere pasar por la matriz para encontrar el último espacio abierto (de todas formas, así es como se implementa habitualmente, aunque ahora que estoy pensando en eso, eso para una lista individualmente vinculada en lugar de una matriz normalmente). ¿Estás diciendo que se implementó de manera diferente en Perl? – Eli
Sí, es un poco diferente. Las listas Perl son matrices con cierta holgura tanto en la parte frontal como posterior. También conocen su tamaño, por lo que tanto 'push' como' unshift' son generalmente O (1). Si la holgura se agota, Perl reasignará una nueva matriz con más espacio. La reasignación es una operación O (n) pero solo tiene que suceder después de cada ~ log (n) operaciones de inserción. – mob