Les pointeurs

Smigle -  
 le père -
Bonjour,
soit des matrices trés grandes et trés creuses.Dans un souci d'optimisation,on évitera d'utiliser les tableaux pour les représenter;on utilisera les pointeurs à la place.Oui veut m' aider pour réaliser ce travail ?

4 réponses

mype Messages postés 2449 Statut Membre 437
 
il faut utiliser un pointeur de pointeur pr faire la matrice
ex: int **matrice;
et ensuite avec un malloc tu defini la taille de la matrice
0
le père
 
Bonsoir

ensuite avec un malloc tu defini la taille de la matrice
Vite dit.Tu définis quelle taille ? Quel(s) malloc fais-tu ?
Perso, je ne sais pas répondre et ton embryon d'explication me semble bien léger.
0
mype Messages postés 2449 Statut Membre 437 > le père
 
c'est simple tu demande a l'utilisateur la taille (cad nb de ligne et de colonne) de la matrice et ensuite tu adapte avec le malloc
ex:
p=(int **) malloc (ligne * sizeof(int*));
la tu auras le nombre de ligne de la matrice
ensuite
for(i=0;i<col;i++)
p[i]=(int *) malloc (col * sizeof(int));
pour les colonnes
et voila tu as ta mtrice 2D qui contient des int
0
le père
 
Merci, mais...
L'énoncé parle de soucis d'optimisation et de matrices très creuses.
Où est l'optimisation si tu utilises déjà ligne+1 pointeurs avant d'allouer finalement ligne*col entiers ? Il valait mieux réserver directement un tableau de ligne*col !
Une solution n'est valable que si on réserve moins de ligne * col éléments.
Ta solution n'est pas simple, elle est simpliste.
0
mype Messages postés 2449 Statut Membre 437
 
pour moi quand il dis dans un soucis d'optimisation on evitera d'utiliser des tableau c'est pour eviter de reserver des case memoire inutiles qui ne seront pas utilisé et qu'il prefere utiliser un pointeur pour allouer exactement le nombre de case memoire de la matrice
mais peu etre que c'est toi qui a raison... ;)
0
le père
 
Je dis exactement la même chose que toi. Mais dans ton exemple, tu réserves un tableau complet, y compris les case inutiles.
Si le problème parlait de tableau à dimensions variables, ta solution serait ok dans la mesure où elle permet d'éviter de définir un tableau de dimensions constantes - donc définies au maximum envisageable.

Mais quand on dit matrices trés grandes et très creuse, on exclut de réserver ligne * colonnes pointeurs ou sructures ou quoi que ce soit. L'énoncé n'est pas ambigu. Imagine une matrice 1 million x 1 million dans laquelle il n'y a que 1000 éléments d'utilisés. Ta méthode utilise 1000 milliards d'entiers :-D

Je suppose qu'il faut faire des listes chainées, probablement à chainages multiples, mais je n'arrive pas à imaginer de structure satisfaisante.
0