Given a file containing at most ten million 7-digit integers with no duplicates. What is an efficient way to print these numbers in ascending order using just 1.5MB RAM and reading the data just once? What if duplicates were permitted?
Ho trovato la domanda sopra a google ma id non trova alcuna risposta pertinente. Basato su ricerca / risposte google e sulla mia comprensione Credo che questo possa essere approccio e algoritmo (considera il linguaggio come Java anche se non ha importanza per la maggior parte dei punti) con query specifiche su ciascun punto
-
Supponendo che un numero intero sia un intero di 4 byte in java. Non penso che la lunghezza (come 7 cifre o 6 cifre) dovrebbe importare qui?
-
Numero di numeri interi che possono essere accomodati sotto 1.5 MB ram = 1.5 / 4 = 375k (dove 4 rappresenta il numero intero di 4 byte) che risulta essere .3 milioni di interi. Significa che .3 milioni di interi possono essere ordinati in una volta nella memoria di 1,5 MB
-
Ora ordina i primi 3 milioni di interi in memoria e li scrivi in un file temporaneo.
-
Scegli un altro lotto di .3 milioni e unisci questo aspetto con il file temporaneo creato nel passaggio 3 e crea un nuovo file temporaneo. Elimina quello al punto 3.
-
Ripeti il passaggio 4 fino al completamento del processo, ovvero 10 / .3 = 34 volte.
Questo algoritmo è corretto? Se sì, non sono in grado di influenzare qui i duplicati?