Bonjour a tous,
SVP j'ai besoin d'un coup de main pour optimizer mon code, premièrement j'ai un problème de temps d'exécution. La cause :le nombre de boucles imbriquées, pour un vecteur V=1:13 on a 6 boucles imbriquées.....pour un vecteur V=1:100 donc 93 boucles imbriquées.. Je sais que c'est mal mais cela fait plusieurs jours / semaines que je réfléchis à comment optimiser mon code «je travaille sur des parties successive de tous les permutations d'un vecteur » , en vain. Ci-dessous un copier-coller de mon code pour voir si vous avez des idées d'optimisation.
et puis ce code pour n=13 donc pour n=14 il faut ajouter un boucle ,pour n=16 il faut ajouter 2 boucles ......,et malheureusement je n'ai pas un idée pour écrire un code qui traiter quelque sois le vecteur "n".
ma situation est trés difficile svp j'ai besoin vraiment d'aide si quelqu'un peut m'aider c'est trés urgent .
et merci d'avance à ceux qui vont juste essayer de me repondre et m'aider.
pour bien comprendre le code tester le pour n=6
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 V=1:13; n=13; for i13=n:-1:1 for i12=sort(setdiff(n:-1:1,i13),'descend') for i11=sort(setdiff(n:-1:1,[i13,i12]),'descend') for i10=sort(setdiff(n:-1:1,[i13,i12,i11]),'descend') for i9=sort(setdiff(n:-1:1,[i13,i12,i11,i10]),'descend') B=sort(setdiff(n:-1:1,[i13,i12,i11,i10,i9]),'descend'); M=perms(B(:,end-6:end)); m=size(M,1); for i8=sort(setdiff(n:-1:1,[i13,i12,i11,i10,i9]),'descend') t = M; t(t == i8) = max(setdiff(1:n,[i13,i12,i11,i10,i9])); P = [i13*ones(m,1) i12*ones(m,1) i11*ones(m,1) i10*ones(m,1) i9*ones(m,1) i8*ones(m,1) t]; end end end end end end
V=1:6;
n=6;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 for i6=n:-1:1 for i5=sort(setdiff(n:-1:1,i6),'descend') B=sort(setdiff(n:-1:1,[i5 i6]),'descend'); M=perms(B(:,end-2:end)); m=size(M,1); for i4=sort(setdiff(n:-1:1,[i5 i6]),'descend') t = M; t(t == i4) = max(setdiff(1:n,[i5 i6])); P = [i6*ones(m,1) i5*ones(m,1) i4*ones(m,1) t]; end end end
Partager