Cola de prioridad general
En caso de que debamos manejar más elementos que los permitidos por el esquema anterior (por ejemplo, no siempre la estructura tendrá permitido usar toda la RAM, con lo cual la limitación podría ser más notoria), extenderemos el esquema previo mediante una secuencia creciente de grupos de archivos.
Tendremos un número máximo de archivos, como antes, pero éstos serán los archivos del primer grupo. Cuando se intente crear el archivo , lo que haremos será unir todos los archivos del grupo actual en uno nuevo, , de tamaño máximo . Con ello quedan libres todos los archivos y se pueden volver a llenar. Una vez que se creen todos los archivos y se necesite crear uno nuevo, se unirán todos en un nuevo archivo, , de tamaño , y se vaciarán todos los . Y así sucesivamente.
Cada unión de archivos para construir un cuesta , es decir, por elemento unido. Si en total construimos grupos, el costo amortizado de una operación es , pues a lo largo de su vida en la estructura, un elemento insertado puede ser escrito, luego unido veces, y finalmente leído.
Para poder crear el primer elemento del grupo debemos haber insertado elementos, por lo tanto el número de grupos que podemos llegar a producir es . Debemos tener buffers en memoria para poder ir extrayendo los mínimos de cada archivo de cada grupo, por lo cual necesitamos que , es decir, estamos limitados a . Para tener tiempo óptimo necesitamos que , es decir, . Podemos entonces elegir para algún constante (el costo de las operaciones se multiplicará por ). Dada la restricción , esto significa que debe cumplirse , es decir .
Esta condición es bastante generosa en la práctica. Por ejemplo, considérese sólo 1 MB de memoria y 1 KB de tamaño de bloque, con lo cual , y . Para manejar 1 YBs (un yottabyte, ) de datos, usemos y obtenemos , con , y el esquema nos cabe en memoria a sólo el doble del costo óptimo (que sería ).