Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Inversion d'un tableau

24 réponses
Avatar
Marc
Bonjour,

Je recherche une methode "optimisee" (minimum de memoire et de temps)
d'inversion d'un tableau. J'avoue j'ai deja vu ca en cours d'algoje crois
mais ca fait un petit bout de temps maintenant.

Pour simplifier cela revient a ce ke mon tableau = {0,1,2,3,4,5} devienne
{5,4,3,2,1,0}.

A dire vrai je vais effectuer cette operation sur des blocs memoires mais
comme ca revient au meme ....

D'avance merci,

Marc

10 réponses

1 2 3
Avatar
gpg
Paul Bacelar wrote:

montableau[MACRO_D_INVERSION(i)]


et MACRO_D_INVERSION(i) c'est quoi?

Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', Emmanuel Delahaye wrote:

il existe un NG d'algorithmique en francais ?


news:fr.comp.alrgorithmes


news:fr.comp.algorithmes

--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
C-reference: http://www.dinkumware.com/manuals/reader.aspx?lib=cpp
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/


Avatar
Marc
surement un truc du genre

#define MACRO_D_INVERSION(i,max_tab) ((max_tab)-(i))

si j'ai bien saisi


"gpg" a écrit dans le message de
news:bnp6ms$9jd$
Paul Bacelar wrote:

montableau[MACRO_D_INVERSION(i)]


et MACRO_D_INVERSION(i) c'est quoi?




Avatar
Marc
Il est pas clair que je veux le realiser en C ?


"Emmanuel Delahaye" a écrit dans le message de
news:
In 'fr.comp.lang.c', "Marc" <fun.x@#nospam#caramail.com> wrote:

Je recherche une methode "optimisee" (minimum de memoire et de temps)
d'inversion d'un tableau. J'avoue j'ai deja vu ca en cours d'algoje
crois


mais ca fait un petit bout de temps maintenant.


T'aurais pas plutôt une question sur le langage C?

--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
C-reference: http://www.dinkumware.com/manuals/reader.aspx?lib=cpp
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/



Avatar
gpg
Marc wrote:

surement un truc du genre

#define MACRO_D_INVERSION(i,max_tab) ((max_tab)-(i))

si j'ai bien saisi


Dans ce cas c'est ridicule. A chaque accès au tableau inversé, on perd du
temps. Il vaut mieux l'inverser une bonne fois pour toutes.
Mais venant d'un "Expert en technologie de développement Microsoft" on peut
s'attendre à tout...

Avatar
DINH Viêt Hoà

Marc wrote:

surement un truc du genre

#define MACRO_D_INVERSION(i,max_tab) ((max_tab)-(i))

si j'ai bien saisi


Dans ce cas c'est ridicule. A chaque accès au tableau inversé, on perd du
temps. Il vaut mieux l'inverser une bonne fois pour toutes.
Mais venant d'un "Expert en technologie de développement Microsoft" on peut
s'attendre à tout...


heu ... ouais, enfin qu'il soit dans un sens ou dans l'autre, le temps
d'accès est approximativement le même.

--
DINH V. Hoa,

"écrire 'dsl' au lieu de 'désolé', c'est pas un problème d'orthographe,
c'est un problème de capillarité palmaire" -- ed


Avatar
Bertrand Mollinier Toublet
Marc a ecrit

Je recherche une methode "optimisee" (minimum de memoire et de temps)
d'inversion d'un tableau. J'avoue j'ai deja vu ca en cours d'algoje


A quoi Emmanuel Delehaye a repondu:
T'aurais pas plutôt une question sur le langage C?


A quoi Marc a repondu:
Il est pas clair que je veux le realiser en C ?


Marc, t'es tombe dans le panneau de la question rhetorique d'Emmanuel.
(et aussi, tu ne respectes pas les conventions de publication sur
Usenet, ce qui est tres agacant, cf ma signature...). Bien entendu, il
faut comprendre que ta question n'est pas sur le *langage* C, mais sur
un algorithme (en l'occurence). Ici, on voudrait plutot discuter du
*langage* C, et non de ses applications.

Donc meme s'il est clair que tu veux realiser ton algo en C, ca ne rend
pas ta question plus dans le sujet. Quand tu auras ecrit un bout de code
pour resoudre ton probleme, et que tu as des problemes lies au langage
sur le bout de code, alors tu seras le bienvenu pour poser tes questions.

--
Bertrand Mollinier Toublet
- Le top-posting.
- Quelle est la pratique la plus chiante sur Usenet ?

Avatar
DINH Viêt Hoà

Marc, t'es tombe dans le panneau de la question rhetorique d'Emmanuel.
(et aussi, tu ne respectes pas les conventions de publication sur
Usenet, ce qui est tres agacant, cf ma signature...). Bien entendu, il
faut comprendre que ta question n'est pas sur le *langage* C, mais sur
un algorithme (en l'occurence). Ici, on voudrait plutot discuter du
*langage* C, et non de ses applications.


Ah si, de temps de temps, il s'agit de ses applications mais il s'agit
plutôt de la façon d'agencer un code, le style et il faut éviter les
questions de ce style qui peuvent se résoudre dans n'importe quel langage.
Bref, tout le monde est d'accord qu'il s'agit d'une question
d'algorithmique.

--
DINH V. Hoa,

"écrire 'dsl' au lieu de 'désolé', c'est pas un problème d'orthographe,
c'est un problème de capillarité palmaire" -- ed

Avatar
Marc Boyer
DINH Viêt Hoà wrote:
après, tu peux effectivement faire cela sur place, genre (en langage C
puisqu'on est sur le groupe) :

for(i = 0 ; i < n / 2 ; i ++) {
void * tmp;


J'ai raté une subtilité là. C'est quoi ce void* ?
C'était pas un tableau d'entier ?

tmp = tab[i];
tab[i] = tab[n - i - 1];
tab[n - i - 1] = tmp;
}

après, appeler cela de l'optimisation, je trouve ça un peu gros.


Disons que j'ai du mal à voir comment optimiser le renversement
d'un tableau. On a un algo trivial en O(N), et je vois mal comment
arriver à moins.
Si on veut faire de la micro optimisation (éviter l'addition
implicite dans tab[i] et le cacul 'n-i'), on doit pouvoir
faire:

int tmp;
for(deb=tab, end=tab+n;deb<tab;deb++, tab--){
tmp=*deb;
*deb=*end;
*end=tmp;
}
Mais je suis même pas sur qu'on gagne quoi que ce soit de mesurable.

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(

Avatar
Marc Boyer
Marc wrote:
Si tu veux optimiser, deja tu peux echanger les cases en economisant la
variable temp:

for(i = 0 ; i < n / 2 ; i ++) {

tab[i]=a tab[n - i - 1]=b
tab[i] += tab[n - i - 1]; tab[i] = a+b
tab[n - i - 1]=b
tab[n - i - 1] = tab[i] - tab[n - i - 1]; tab[i] = a+b tab[n -
i - 1]=a
tab[i] -= tab[n - i - 1]; tab[i] = b
tab[n - i - 1]=a
}


Va falloir que tu expliques sur quelle machine réelle
l'économie d'une variable de type entier permet de considérer
que l'ajout de 3 opérations arithmétiques entières par itération
de boucle constitue une optimisation.

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(

1 2 3