4 réponses
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
ex: int **matrice;
et ensuite avec un malloc tu defini la taille de la matrice
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.
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.
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... ;)
mais peu etre que c'est toi qui a raison... ;)
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.
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.
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.
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