Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1515 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] Construire un tableau à partir d'un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Construire un tableau à partir d'un fichier

n°1509165
fhr
Posté le 31-01-2007 à 15:10:41  profilanswer
 

Bonjour,
 
j'ai un fichier contenant des entiers (nombre non connu à l'avance), par exemple
0
1
2
...
 
Je voudrais stocker ces entiers dans un tableau dynamique, mais je ne sais pas trop quelle méthode adopter pour remplir le tableau; quel est le mieux (en terme de performances surtout) ?
 
1) Parcourir le fichier une première fois pour connaitre le nombre d' entiers et ainsi faire une unique allocation puis le reparcourir pour remplir le tableau ?
2) Parcourir le fichier une seule fois mais faire autant de realloc qu'il y a d' entiers ?
3) Une méthode "hybride", genre faire un malloc (n...), où n serait un nombre "typique" de entiers, puis adapter le tableau au cas où on aurait plus de n entiers ?
 
Merci d'avance pour vos suggestions :)

mood
Publicité
Posté le 31-01-2007 à 15:10:41  profilanswer
 

n°1509370
Taz
bisounours-codeur
Posté le 31-01-2007 à 22:38:40  profilanswer
 

man realloc
 
ou utiliser une bibliothèque genre glib g_array

n°1509379
franceso
Posté le 31-01-2007 à 23:01:38  profilanswer
 

je pencherais pour une méthode "hybride" où tu alloues par paquets. Dans ce genre là, il y différents types de méthodes : celles où tu alloues par paquets de taille fixe (genre 1000 éléments). Sinon, il y a des trucs plus dynamiques, comme par exemple la stratégie d'allocation des vectors du C++ : tu doubles la taille à chaque réallocation.

Message cité 1 fois
Message édité par franceso le 31-01-2007 à 23:01:53

---------------
TriScale innov
n°1509412
Trap D
Posté le 01-02-2007 à 08:32:11  profilanswer
 

franceso a écrit :

je pencherais pour une méthode "hybride" où tu alloues par paquets. Dans ce genre là, il y différents types de méthodes : celles où tu alloues par paquets de taille fixe (genre 1000 éléments). Sinon, il y a des trucs plus dynamiques, comme par exemple la stratégie d'allocation des vectors du C++ : tu doubles la taille à chaque réallocation.

Apparemment, il semble qu'il faille multiplier par le nombre d'or : voir http://www.bourguet.org/realloc.pdf

n°1509453
franceso
Posté le 01-02-2007 à 10:10:54  profilanswer
 

:jap: merci, je ne connaissais pas ça. Je vais me pencher un peu là dessus : ça a l'air intéressant.


---------------
TriScale innov
n°1509695
Sve@r
Posté le 01-02-2007 à 16:45:22  profilanswer
 

Trap D a écrit :

Apparemment, il semble qu'il faille multiplier par le nombre d'or : voir http://www.bourguet.org/realloc.pdf


 
Taz avait déjà dit un truc analogue dans un de ses topics. Il avait privilégié la méthode "taille n" = "taille n - 2 + taille n - 1" ce qui amène évidemment au nombre d'or...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1509711
Taz
bisounours-codeur
Posté le 01-02-2007 à 17:17:03  profilanswer
 

Le tout c'était de multiplier n avec un facteur k de manière à ce que n[i+2] ~ n[i+1] + n[i]. En effet dans le cas d'une réallocation complète et dans si l'allocateur mémoire a des propriétés de type 'best fit', ce facteur de croissance peut permettre de réussir l'allocation i+2 en réutilisant l'espace des deux précédentes allocations i+1 et i. C'est choisi par pas mal d'implémentations mais aussi parce l'accroissement est moins important qu'avec k = 2 tout en restant exponentiel.

 

On cherche donc un k tel que
¤ n[i+1] = k * n[i]
¤ n[i+2] = n[i+1] + n[i]

 

<=> k² * n[i] = k * n[i] + n[i]
<=> k² = k + 1
on cherche k réel strictement positif
<=> k = (1 + sqrt(5)) / 2
i.e. k ~ 1,62

 


Et ne pas oublier qu'on peut faire une approximation en calcul entier en faisant '16 * n / 10' par exemple.


Message édité par Taz le 01-02-2007 à 17:19:55
n°1510794
franceso
Posté le 05-02-2007 à 09:46:25  profilanswer
 

:jap:


---------------
TriScale innov

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] Construire un tableau à partir d'un fichier

 

Sujets relatifs
création d'un fichier batch utilisant xt -> xml+xsl=HTMLanalyser le type d'un fichier en c sous windows
[JAVA] Imprimer un fichier texte[Résolu] Comment lire un fichier .ini ?
Problème: se déplacer dans un fichier[RESOLU] Comment ajouter de l'asm dans un fichier C
[PHP] Recherche d'un module pour création de tableau du style ExcelOuverture fichier php pas possible
Détail sur un fichier d'un PC clientinjection de code dans fichier PE
Plus de sujets relatifs à : [C] Construire un tableau à partir d'un fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR