Ho affrontato questa domanda puzzle
[related to data structure
] in una competizione di codifica.Un puzzle sulla struttura dati
C'è un pianeta di alberi (alberi reali non struttura dati dell'albero !!). Ha miliardi o addirittura trilioni di alberi. Il re ordina di trovare la mediana delle età (in anni e interi) di tutti gli alberi usando la datazione al carbonio. (Method does not matter.
) Nota: Mediana è il "numero centrale" in un elenco ordinato di numeri.
Vincoli:
1.
L'albero più antico è conosciuto per essere 2000 anni fa.
2.
Hanno una singola macchina che può memorizzare interi compresi nell'intervallo da -infinito a + infinito.
3.
Ma il numero di tali numeri interi che possono essere memorizzati in memoria alla volta è 1 milione.
quindi, una volta memorizzato 1 milione di numeri interi per memorizzare quello successivo, è necessario eliminare uno già memorizzato.
Quindi in qualche modo devono tenere traccia della mediana mentre continuano a contare le età degli alberi.
Come possono fare questo?
Il mio approccio
Utilizzare una variante di tipo esterno per ordinare i secoli in blocchi & li scrivono nel file.
Applicare la fusione k-way [per i blocchi].
Il problema con l'approccio precedente è che è necessario eseguire due scansioni del file.
mi viene in mente un altro approccio che utilizza le informazioni The oldest tree is known to be 2000 years old.
non possiamo prendere un count array
[as range of ages of tree is fixed
]?
Voglio sapere c'è un approccio migliore?
Esiste alcun metodo in cui non abbiamo bisogno di memorizzare i dati nel file? [where only main memory is sufficient?
]
Non sono sicuro se questo aiuterà: [Codifica Huffman] (http://en.wikipedia.org/wiki/Huffman_coding) – lllluuukke
È barare per archiviare le età di tutti gli alberi in una posizione di memoria usando la codifica di Gödel? – Ishtar
No, qualsiasi idea migliore è apprezzata. –