2011-10-04 2 views
0

J'ai été demandé par un intervieweur, la question est simple, find the top 100 from 1 million integers (32-bits). Lorsque j'ai résolu la question, j'ai pensé que si je put all the 1 million integers into the memory, cela prendrait 4 MB space.confusion au sujet du fichier I/O

Ma question n'a probablement rien à voir avec la question de l'entrevue, mais la voici:

si les 1 million entiers sont Stockés dans un fichier num.txt, et encore plus, je veux read the all out du fichier et put them in memory (les stocker dans un tableau probablement), puis how many IO will it take?

+0

En fait monsieur, il y a un max de 3,8 mégaoctets à un max. À moins que chaque nombre entier utilise toutes les 32 décimales, vous allez probablement obtenir quelque chose de beaucoup plus petit. Droite? En supposant que la moitié des millions de chiffres sont seulement 16 longs obtient seulement 2,86222295 mégaoctets. – FreeSnow

+0

@DadeLamkins, oui, vous avez raison, mais ce que je veux savoir, c'est combien d'IO devrait-il prendre si je veux lire tous les entiers de 32 bits du fichier. – Alcott

Répondre

1

Ce que vous voulez faire dans cette question si une analyse. Vous voulez avoir un tableau, ou peut-être une file d'attente de priorité, qui contient 100 entiers et stocker simplement les 100 plus grands que vous voyez.

Vous ne voulez pas prendre la prise dans le fichier une page à la fois, peut-être en utilisant quelque chose comme mmap.

le nombre d'E/S sera de 1mio. entiers divisés par la taille de page.

+0

voulez-vous dire que, si ma taille de page est '4k', alors l'IO sera' 10^6 * 4/4k', n'est-ce pas? – Alcott

+0

oui, c'est exactement ce que je veux dire :-) –

Questions connexes