Me enfrenté a esta pregunta puzzle
[related to data structure
] en una competición de codificación.Un rompecabezas en la estructura de datos
Hay un planeta de árboles (árboles reales, no estructura de datos de árbol !!). Tiene miles de millones o incluso billones de árboles. El rey ordena encontrar la mediana de las edades (en años y números enteros) de todos los árboles que usan datación por carbono. (Method does not matter.
) Nota: La mediana es el "número medio" en una lista ordenada de números.
Restricciones:
1.
El árbol más antiguo se sabe que es de 2000 años de antigüedad.
2.
Tienen una sola máquina que puede almacenar enteros en el rango de -infinito a + infinito.
3.
Pero la cantidad de dichos enteros que se pueden almacenar en la memoria a la vez es de 1 millón.
así que, una vez que almacene 1 millón de enteros para almacenar el siguiente, debe eliminar uno ya almacenado.
De alguna manera tienen que hacer un seguimiento de la mediana a medida que continúan contando las edades de los árboles.
¿Cómo pueden hacer esto?
Mi enfoque
Uso de una variante de tipo externo para ordenar las edades en trozos & los escriben en el archivo.
Aplicar combinación de k-way [para los fragmentos].
El problema con el enfoque anterior es que necesita dos escaneos del archivo.
No puedo pensar en otro enfoque que utiliza la información The oldest tree is known to be 2000 years old.
¿No podemos tomar un count array
[as range of ages of tree is fixed
]?
Quiero saber ¿Hay algún otro enfoque?
¿Existe algún método en el que no necesitamos almacenar los datos en el archivo? [where only main memory is sufficient?
]
No estoy seguro si esto ayudará: [Huffman Coding] (http://en.wikipedia.org/wiki/Huffman_coding) – lllluuukke
¿Es una trampa almacenar las edades de todos los árboles en una ubicación de memoria usando la codificación Gödel? – Ishtar
No, se aprecia una mejor idea. –