La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

1 Automazione dellalgoritmo ricorsivo di permutazione eseguita da Mariano Melchiorri.

Presentazioni simili


Presentazione sul tema: "1 Automazione dellalgoritmo ricorsivo di permutazione eseguita da Mariano Melchiorri."— Transcript della presentazione:

1 1 Automazione dellalgoritmo ricorsivo di permutazione eseguita da Mariano Melchiorri

2 2 PERM(Char []A,int K) If(k=n) Controllo (A); else {for(int =k;i<n;i++); SWAP(A[i],A[k]); PERM(A,K+1); SWAP(A[i],A[k]);} Dove: 1. n = dimensione dellarray A 2.Controllo è la chiamata ad un metodo che visualizza le permutazioni di A 3.SWAP è la chiamata ad un metodo che scambia i valori degli elementi passati come parametro attuale Nelle diapositive successive è riportato lo stato degli indici k e i allinterno di ogni chiamata durante lesecuzione del corpo del metodo.

3 3 PERM(Char []A,int K) Invocazione (1) A={a,b,c}; n=A.length=3 PERM(A,0) codice 1)If(k=n) Controllo (A); else{ 2)for(int =k;i<n;i++); 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);} Istr.kiA 1 0a b c 2 00 3 00 4 00 1° chiamata ricorsiva da (1) Invocazione (2) 2

4 4 PERM(Char []A,int K) Invocazione (2) 1°chiamata da (1) PERM(A,1) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++); 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);} Istr.kiA 1 1a b c 2 11 3 11 4 11 1° chiamata ricorsiva da (2) Invocazione (3) 3

5 5 PERM(Char []A,int K) Invocazione (3) 1°chiamata da (2) PERM(A,2) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++); 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);} Istr.kiA 1 2a b c 2 22 3 22 4 22 1° chiamata ricorsiva da (3) Invocazione (4) 4

6 6 PERM(Char []A,int K) Invocazione (4) 1°chiamata da (3) PERM(A,3) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++); 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);} Istr.kiA 1 3a b c Chiamata Controllo(A) e uscita con ritorno a Invocazione (3) 3 Permutazione a b c

7 7 PERM(Char []A,int K) Invocazione (3) 1°chiamata da (2) PERM(A,2) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++); 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);} Istr.kiA 1 2a b c 2 22 3 22 4 22 5 22 2 23 Fine primo ciclo di for Incremento di i, uscita dal for e ritorno a Invocazione (2) 4 2

8 8 PERM(Char []A,int K) Invocazione (2) 1°chiamata da (1) PERM(A,1) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++){ 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);}} Istr.kiA 1 1a b c 2 11 3 11 4 11 5 11 2 12 3 12a c b 4 12 2° chiamata ricorsiva da 2 Invocazione (5) 3 5

9 9 PERM(Char []A,int K) Invocazione (5) 2°chiamata da (2) PERM(A,2) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++){ 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);}} Istr.kiA 1 2a c b 2 22 3 22 4 22 1° chiamata ricorsiva da (5) Invocazione (6) 6

10 10 PERM(Char []A,int K) Invocazione (6) 1°chiamata da (5) PERM(A,3) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++){ 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);}} Istr.kiA 1 3a c b Chiamata Controllo(A) e uscita con ritorno a Invocazione (5) 5 Permutazione a c b

11 11 PERM(Char []A,int K) Invocazione (5) 2°chiamata da (2) PERM(A,2) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++){ 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);}} Istr.kiA 1 2a c b 2 22 3 22 4 22 5 22 2 23 6 2 Incremento di i, uscita dal for e ritorno a Invocazione (2)

12 12 PERM(Char []A,int K) Invocazione (2) 1°chiamata da (1) PERM(A,1) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++){ 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);}} Istr.kiA 1 1a b c 2 11 3 11 4 11 2 12 3 12a c b 4 12 5 12a b c 2 13 5 Fine secondo ciclo di for Incremento di i, uscita dal for e ritorno a Invocazione (1) 1

13 13 PERM(Char []A,int K) Invocazione (1) A={a,b,c}; n=A.length=3 PERM(A,0) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++); 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);} Istr.kiA 1 0a b c 2 00 3 00 4 00 5 00 2 01 3 01b a c 4 01 Fine primo ciclo for 2 2° chiamata ricorsiva da (1) Invocazione (7) 7

14 14 PERM(Char []A,int K) Invocazione (7) 2°chiamata da (1) PERM(A,1) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++); 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);} Istr.kiA 1 1b a c 2 11 3 11 4 11 1° chiamata ricorsiva da (7) Invocazione (8) 8

15 15 PERM(Char []A,int K) Invocazione (8) 1°chiamata da (7) PERM(A,2) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++); 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);} Istr.kiA 1 2b a c 2 22 3 22 4 22 1° chiamata ricorsiva da (8) Invocazione (9) 9

16 16 PERM(Char []A,int K) Invocazione (9) 1°chiamata da (3) PERM(A,3) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++); 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);} Istr.kiA 1 3b a c Chiamata Controllo(A) e uscita con ritorno a Invocazione (8) 8 Permutazione b a c

17 17 PERM(Char []A,int K) Invocazione (8) 1°chiamata da (7) PERM(A,2) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++); 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);} Istr.kiA 1 2b a c 2 22 3 22 4 22 5 22 2 23 Fine primo ciclo di for Incremento di i, uscita dal for e ritorno a Invocazione (7) 9 7

18 18 PERM(Char []A,int K) Invocazione (7) 2°chiamata da (1) PERM(A,1) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++){ 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);}} Istr.kiA 1 1b a c 2 11 3 11 4 11 2 12 3 12b c a 4 12 2° chiamata ricorsiva da (7) Invocazione (10) 8 10

19 19 PERM(Char []A,int K) Invocazione (10) 2°chiamata da (7) PERM(A,2) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++){ 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);}} Istr.kiA 1 2b c a 2 22 3 22 4 22 1° chiamata ricorsiva da (10) Invocazione (11) 11

20 20 PERM(Char []A,int K) Invocazione (11) 1°chiamata da (10) PERM(A,3) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++){ 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);}} Istr.kiA 1 3b c a Chiamata Controllo(A) e uscita con ritorno a Invocazione (10) 10 Permutazione b c a

21 21 PERM(Char []A,int K) Invocazione (10) 2°chiamata da (7) PERM(A,2) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++){ 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);}} Istr.kiA 1 2b c a 2 22 3 22 4 22 5 22 2 23 11 7 Incremento di i, uscita dal for e ritorno a Invocazione (7)

22 22 PERM(Char []A,int K) Invocazione (7) 2°chiamata da (1) PERM(A,1) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++){ 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);}} Istr.kiA 1 1b a c 2 11 3 11 4 11 2 12 3 12b c a 4 12 5 12b a c 2 13 10 Fine secondo ciclo di for Incremento di i, uscita dal for e ritorno a Invocazione (1) 1

23 23 PERM(Char []A,int K) Invocazione (1) A={a,b,c}; n=A.length=3 PERM(A,0) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++); 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);} Istr.kiA 10a b c 200 300 400 500 201 301b a c 401 501a b c 202 302c b a 402 Fine secondo ciclo for 7 3° chiamata ricorsiva da (1) Invocazione (12) 12

24 24 PERM(Char []A,int K) Invocazione (12) 3°chiamata da (1) PERM(A,1) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++); 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);} Istr.kiA 1 1c b a 2 11 3 11 4 11 1° chiamata ricorsiva da (12) Invocazione (13) 13

25 25 PERM(Char []A,int K) Invocazione (13) 1°chiamata da (12) PERM(A,2) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++); 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);} Istr.kiA 1 2c b a 2 22 3 22 4 22 1° chiamata ricorsiva da (13) Invocazione (14) 14

26 26 PERM(Char []A,int K) Invocazione (14) 1°chiamata da (13) PERM(A,3) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++); 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);} Istr.kiA 1 3c b a Chiamata Controllo(A) e uscita con ritorno a Invocazione (13) 13 Permutazione c b a

27 27 PERM(Char []A,int K) Invocazione (13) 1°chiamata da (12) PERM(A,2) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++); 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);} Istr.kiA 1 2c b a 2 22 3 22 4 22 5 22 2 23 Fine primo ciclo di for Incremento di i, uscita dal for e ritorno a Invocazione (12) 14 12

28 28 PERM(Char []A,int K) Invocazione (12) 3°chiamata da (1) PERM(A,1) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++){ 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);}} Istr.kiA 1 1c b a 2 11 3 11 4 11 5 11 2 12 3 12c a b 4 12 2° chiamata ricorsiva da (12) Invocazione (15) 13 15

29 29 PERM(Char []A,int K) Invocazione (15) 2°chiamata da (12) PERM(A,2) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++){ 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);}} Istr.kiA 1 2c a b 2 22 3 22 4 22 1° chiamata ricorsiva da (15) Invocazione (16) 16

30 30 PERM(Char []A,int K) Invocazione (16) 1°chiamata da (15) PERM(A,3) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++){ 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);}} Istr.kiA 1 3c a b Chiamata Controllo(A) e uscita con ritorno a Invocazione (15) 15 Permutazione c a b

31 31 PERM(Char []A,int K) Invocazione (15) 2°chiamata da (12) PERM(A,2) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++){ 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);}} Istr.kiA 1 2c a b 2 22 3 22 4 22 5 22 2 22 16 12 Incremento di i, uscita dal for e ritorno a Invocazione (12)

32 32 PERM(Char []A,int K) Invocazione (12) 3°chiamata da (1) PERM(A,1) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++){ 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);}} Istr.kiA 1 1c b a 2 11 3 11 4 11 2 12 3 12c a b 4 12 5 12c b a 2 13 15 Fine secondo ciclo di for Incremento di i, uscita dal for e ritorno a Invocazione (1) 1

33 33 PERM(Char []A,int K) Invocazione (1) A={a,b,c}; n=A.length=3 PERM(A,0) codice 1)If(k=n) Controllo (A); else{ 2)for(int i=k;i<n;i++); 3)SWAP(A[i],A[k]); 4)PERM(A,K+1); 5)SWAP(A[i],A[k]);} Istr. kiA 10a b c 200 300 400 500 201 301b a c 401 501a b c 202 302c b a 402 502a b c 203 Fine terzo ciclo for 12 Fine esecuzione


Scaricare ppt "1 Automazione dellalgoritmo ricorsivo di permutazione eseguita da Mariano Melchiorri."

Presentazioni simili


Annunci Google