Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 27

Discussione: Permutazioni vettore C

  1. #1

    Permutazioni vettore C

    ciao a tutti.. Ho un vettore di N numeri generati a caso, e devo fare le permutazioni di questo vettore. Dovrei farlo con la ricorsione ma non ho capito bene la tecnica perché sono agli albori, potrei utilizzare la funzione n! così mi posso calcolare le possibili soluzioni? Potete darmi qualche consiglio?

    potrebbe andare questa soluzione, anche se fatta con Java, dopo bisognerebbe adattarla al C. Voglio capire se potrebbe andare bene. Grazie
    codice:
    static void permuta ricorsivo ( int [ ] elementi , int da , int a ){
    int k ;
    i f ( a > da ){
      for (k = a ; k >= da; k−− ){
         Ar r a y ut i l . swap( elementi , k , a ) ;
         permuta r icor s ivo ( elementi , da , a− 1);
         Ar r a y ut i l . swap( elementi , k , a ) ;
          }
    } 
    else
      {
       System . out . pr int ln ( Ar r a y ut i l .dump( elementi ) ) ; 
       }
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Scusa, ma questa è la sezione C, non Java. Quindi, proponi una tua versione C e se ne riparla.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    si lo so, ma non riesco a trasformare questo codice in C, ossia, con questo codice Java voglio calcolarmi le permutazioni ma questo codice non permette di generare una permutazione per volta.
    Le permutazioni di un vettore di n elementi si ottengono calcolando le permutazioni
    del sottovettore di n-1 elementi e poi scambiando l’n-esimo elemento con ogni elemento
    del sottovettore. Il caso base è la permutazione di un vettore di due elementi ed è
    semplicemente uno scambio.

    1.Devo creare un vettore casuale di n elementi
    1.creo un vettore di appoggio per creare le permutazioni
    2.cercare le permutazioni
    3.per ogni permutazione devo fare x calcoli
    4. devo memorizzare x risultato
    5. se Xrisultato è minore di XrisultatoPrecedente allora memorizzo il vettore
    6. vado avanti con le permutazioni
    7. torno al punto2.
    8. Se vettore è uguale al vettore iniziale allora stampo vettore con Xrisultato minore.
    9.Esco dal programma

  4. #4
    Da qui:

    http://www.cs.utsa.edu/~dj/ut/utsa/c...lecture25.html

    Ho modificato il main per fargli calcolare il tempo impiegato:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    /* function to swap array elements */
    
    void swap (int v[], int i, int j)
    {
    	int	t;
    
    	t = v[i];
    	v[i] = v[j];
    	v[j] = t;
    }
    
    /* recursive function to generate permutations */
    void perm (int v[], int n, int i)
    {
    
    	/* this function generates the permutations of the array
    	 * from element i to element n-1
    	 */
    	int	j;
    	int t;
    
    	/* if we are at the end of the array, we have one permutation
    	 * we can use (here we print it; you could as easily hand the
    	 * array off to some other function that uses it for something
    	 */
    	if (i == n)
    	{
    		for (j = 0; j < n; j++)
    			printf ("%d ", v[j]);
    		printf ("\n");
    	}
    	else
    	{
    		/* recursively explore the permutations starting
    		 * at index i going through index n-1
    		 */
    		for (j = i; j < n; j++)
    		{
    
    			/* try the array with i and j switched */
    
    			/* swap (v, i, j); */
    			t = v[i];
    			v[i] = v[j];
    			v[j] = t;
    					
    			perm (v, n, i+1);
    
    			/* swap them back the way they were */
    
    			/* swap (v, i, j); */
    			t = v[i];
    			v[i] = v[j];
    			v[j] = t;						
    		}
    	}
    }
    			
    /* little driver function to print perms of first 5 integers */
    
    int main(int argc, char *argv[])
    {
    	clock_t c_start, c_end;
    	double TempoImpiegato;  
    	
    	int	*v;
    	int N;
    	int i;
    	
    	if( argc != 2 )
    	{
    		fprintf(stderr,"Usage: %s N\n", argv[0]);
    		return -1;
    	}
    	N = atoi(argv[1]);
    	
    	v = (int*)calloc(N + 1, sizeof(int));
    	if ( !v )
    	{
    		printf("Error: insufficient memory.\n");
    		return -1;
    	}		
    	
    	for (i = 0; i < N; i++)
    		v[i] = i+1;
    				
    	c_start = clock();
    	
    	perm (v, N, 0);
    	
    	c_end = clock();
    	TempoImpiegato = (double)(c_end - c_start) / CLOCKS_PER_SEC;
    	printf("Tempo impiegato -> %5.5f secondi\n\n", TempoImpiegato);   
    	
    	free(v);
    		
    	return 0;
    }

  5. #5
    Questo codice mi calcola ricorsivamente le permutazioni di N elementi ma non in ordine casuale??
    Il codice in Java aveva il limite che non potevo vedere ogni permutazione,
    ossia io vorrei che per ogni permutazione del vettore mi facesse questo calcolo:
    A partire dal terzo elemento, per ogni elemento bisogna considerare il quadrato della differenza fra l'elemento stesso e l'elemento che lo precede, sommata alla metà del quadrato della differenza fra l'elemento stesso e l'elemento che lo precede di due posizioni.
    E' troppo complicato, vero?

  6. #6
    Originariamente inviato da franceskaaaz
    Questo codice mi calcola ricorsivamente le permutazioni di N elementi ma non in ordine casuale??
    Il codice in Java aveva il limite che non potevo vedere ogni permutazione,
    ossia io vorrei che per ogni permutazione del vettore mi facesse questo calcolo:
    A partire dal terzo elemento, per ogni elemento bisogna considerare il quadrato della differenza fra l'elemento stesso e l'elemento che lo precede, sommata alla metà del quadrato della differenza fra l'elemento stesso e l'elemento che lo precede di due posizioni.
    E' troppo complicato, vero?
    Non è complicato. Puoi organizzare il codice in modo che, invece di stampare le permutazioni, la funzione ricorsiva richiami una funzione callback nella quale effettui tutti i calcoli e i controlli che vuoi.

    L'esempio precedente, modificato con l'uso di una funzione callback(onChange) diventa:

    codice:
    /* http://www.cs.utsa.edu/~dj/ut/utsa/c...lecture25.html */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    /* function to swap array elements */
    
    void swap (int v[], int i, int j)
    {
    	int	t;
    
    	t = v[i];
    	v[i] = v[j];
    	v[j] = t;
    }
    
    void onChange(int a[], int v[], int n)
    {
    	int j;
    	
    	for (j = 0; j < n; j++)
    		printf ("%d ", a[v[j]]);
    	printf ("\n");	
    }
    
    /* recursive function to generate permutations */
    void perm (int a[], int v[], int n, int i, void (*pfnOnChange)(int a[], int v[], int n))
    {
    
    	/* this function generates the permutations of the array
    	 * from element i to element n-1
    	 */
    	int	j;
    	int t;
    
    	/* if we are at the end of the array, we have one permutation
    	 * we can use (here we print it; you could as easily hand the
    	 * array off to some other function that uses it for something
    	 */
    	if (i == n)
    	{
    		if ( pfnOnChange )
    			pfnOnChange(a, v, n);
    		/*
    		for (j = 0; j < n; j++)
    			printf ("%d ", v[j]);
    		printf ("\n");
    		*/
    	}
    	else
    	{
    		/* recursively explore the permutations starting
    		 * at index i going through index n-1
    		 */
    		for (j = i; j < n; j++)
    		{
    
    			/* try the array with i and j switched */
    
    			/* swap (v, i, j); */
    			t = v[i];
    			v[i] = v[j];
    			v[j] = t;
    					
    			perm (a, v, n, i+1, pfnOnChange);
    
    			/* swap them back the way they were */
    
    			/* swap (v, i, j); */
    			t = v[i];
    			v[i] = v[j];
    			v[j] = t;						
    		}
    	}
    }
    			
    /* little driver function to print perms of first 5 integers */
    
    int main(/*int argc, char *argv[]*/)
    {
    	clock_t c_start, c_end;
    	double TempoImpiegato;  
    	
    	int *a;
    	int	*v;
    	int N;
    	int i;
    
    	N = 4;
    	
    	a = (int*)calloc(N + 1, sizeof(int));
    	if ( !a )
    	{
    		printf("Error: insufficient memory.\n");
    		return -1;
    	}
    
    	a[0] = 0;
    	a[1] = 5;
    	a[2] = 8;
    	a[3] = 13;
    	a[4] = 21;	
    	
    	v = (int*)calloc(N + 1, sizeof(int));
    	if ( !v )
    	{
    		printf("Error: insufficient memory.\n");
    		free(a);
    		return -1;
    	}		
    	
    	for (i = 0; i < N; i++)
    		v[i] = i+1;
    				
    	c_start = clock();
    	
    	perm (a, v, N, 0, onChange);
    	
    	c_end = clock();
    	TempoImpiegato = (double)(c_end - c_start) / CLOCKS_PER_SEC;
    	printf("Tempo impiegato -> %5.5f secondi\n\n", TempoImpiegato);   
    	
    	free(v);
    		
    	return 0;
    }

  7. #7
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    void scambia (char*, char*);
    void stampa(char [], int );
    
    int main()
    {
       int i,j,k,conta=0;
       int len;
    
       char numero[]={"123"};
       len=strlen(numero);
    
    
       for ( i=0; i<len ; i++ )
       {
              for ( j=0; j<len ; j++)
              {
                      for ( k=j+1; k<len ; k++)
                      {   scambia(&numero[j],&numero[k]);
                          stampa(numero,len);
                          conta++;
                           }
              }
         }
    
       printf("\n\n");
       printf("Le permutazioni possibili sono: %d\n\n",conta);
       system("pause");
    
    }
    
    void scambia (char *a, char*b)
    {
         char tmp;
         tmp=*a;
         *a=*b;
         *b=tmp;
    
    }
    
    
    
    void stampa(char v[], int dimensione)
    {  int i;
    
       printf("\n\n");
       for (i=0;i<dimensione;i++)
          printf("%c",v[i]);
    
    }
    Ho buttato giù queste righe di codice e mi ritrovo le possibili permutazioni.
    Il problema è che devo creare un vettore dinamico con N numeri generati a caso e lunghezza variabile e poi per ogni permutazione devo fare i calcoli citati sopra.. Io questo lo sto facendo iterativamente ma lo dovrei fare con la ricorsione, mi date una mano per favore? Grazie..

  8. #8
    Nell'esempio postato in precedenza, se modifichi la funzione callback onChange in questo modo:

    codice:
    void onChange(int a[], int v[], int n)
    {
    	int j;
    	
    	for (j = 0; j < n; j++)
    		printf ("%d ", a[v[j]]);
    	printf ("\n");	
    	
    	for (j = 2; j < n; j++ )
    	{
    		printf("Il quadrato della differenza tra %d e %d e' -> %f\n", a[v[j]], a[v[j-1]], pow(a[v[j]] - a[v[j-1]], 2));
    	}
    }
    l'output è:

    codice:
    [vincenzo]$ gcc -Wall -W -pedantic -O3 perm.c -o perm
    [vincenzo]$ ./perm
    5 8 13 21 
    Il quadrato della differenza tra 13 e 8 e' -> 25.000000
    Il quadrato della differenza tra 21 e 13 e' -> 64.000000
    5 8 21 13 
    Il quadrato della differenza tra 21 e 8 e' -> 169.000000
    Il quadrato della differenza tra 13 e 21 e' -> 64.000000
    5 13 8 21 
    Il quadrato della differenza tra 8 e 13 e' -> 25.000000
    Il quadrato della differenza tra 21 e 8 e' -> 169.000000
    5 13 21 8 
    Il quadrato della differenza tra 21 e 13 e' -> 64.000000
    Il quadrato della differenza tra 8 e 21 e' -> 169.000000
    5 21 13 8 
    Il quadrato della differenza tra 13 e 21 e' -> 64.000000
    Il quadrato della differenza tra 8 e 13 e' -> 25.000000
    5 21 8 13 
    Il quadrato della differenza tra 8 e 21 e' -> 169.000000
    Il quadrato della differenza tra 13 e 8 e' -> 25.000000
    8 5 13 21 
    Il quadrato della differenza tra 13 e 5 e' -> 64.000000
    Il quadrato della differenza tra 21 e 13 e' -> 64.000000
    8 5 21 13 
    Il quadrato della differenza tra 21 e 5 e' -> 256.000000
    Il quadrato della differenza tra 13 e 21 e' -> 64.000000
    8 13 5 21 
    Il quadrato della differenza tra 5 e 13 e' -> 64.000000
    Il quadrato della differenza tra 21 e 5 e' -> 256.000000
    8 13 21 5 
    Il quadrato della differenza tra 21 e 13 e' -> 64.000000
    Il quadrato della differenza tra 5 e 21 e' -> 256.000000
    8 21 13 5 
    Il quadrato della differenza tra 13 e 21 e' -> 64.000000
    Il quadrato della differenza tra 5 e 13 e' -> 64.000000
    8 21 5 13 
    Il quadrato della differenza tra 5 e 21 e' -> 256.000000
    Il quadrato della differenza tra 13 e 5 e' -> 64.000000
    13 8 5 21 
    Il quadrato della differenza tra 5 e 8 e' -> 9.000000
    Il quadrato della differenza tra 21 e 5 e' -> 256.000000
    13 8 21 5 
    Il quadrato della differenza tra 21 e 8 e' -> 169.000000
    Il quadrato della differenza tra 5 e 21 e' -> 256.000000
    13 5 8 21 
    Il quadrato della differenza tra 8 e 5 e' -> 9.000000
    Il quadrato della differenza tra 21 e 8 e' -> 169.000000
    13 5 21 8 
    Il quadrato della differenza tra 21 e 5 e' -> 256.000000
    Il quadrato della differenza tra 8 e 21 e' -> 169.000000
    13 21 5 8 
    Il quadrato della differenza tra 5 e 21 e' -> 256.000000
    Il quadrato della differenza tra 8 e 5 e' -> 9.000000
    13 21 8 5 
    Il quadrato della differenza tra 8 e 21 e' -> 169.000000
    Il quadrato della differenza tra 5 e 8 e' -> 9.000000
    21 8 13 5 
    Il quadrato della differenza tra 13 e 8 e' -> 25.000000
    Il quadrato della differenza tra 5 e 13 e' -> 64.000000
    21 8 5 13 
    Il quadrato della differenza tra 5 e 8 e' -> 9.000000
    Il quadrato della differenza tra 13 e 5 e' -> 64.000000
    21 13 8 5 
    Il quadrato della differenza tra 8 e 13 e' -> 25.000000
    Il quadrato della differenza tra 5 e 8 e' -> 9.000000
    21 13 5 8 
    Il quadrato della differenza tra 5 e 13 e' -> 64.000000
    Il quadrato della differenza tra 8 e 5 e' -> 9.000000
    21 5 13 8 
    Il quadrato della differenza tra 13 e 5 e' -> 64.000000
    Il quadrato della differenza tra 8 e 13 e' -> 25.000000
    21 5 8 13 
    Il quadrato della differenza tra 8 e 5 e' -> 9.000000
    Il quadrato della differenza tra 13 e 8 e' -> 25.000000

  9. #9
    Ecco:

    codice:
    void onChange(int a[], int v[], int n)
    {
    	int j;
    	double x, y, z;
    	
    	for (j = 0; j < n; j++)
    		printf ("%d ", a[v[j]]);
    	printf ("\n");	
    	
    	for (j = 2; j < n; j++ )
    	{
    		x = pow(a[v[j]] - a[v[j-1]], 2);
    		y = pow(a[v[j]] - a[v[j-2]], 2)/2;
    		z = x + y;
    		printf("Il quadrato della differenza tra %d e %d e' -> %f\n", a[v[j]], a[v[j-1]], x);
    		printf("La meta' del quadrato della differenza tra %d e %d e' -> %f\n", a[v[j]], a[v[j-2]], y);
    		printf("La somma tra %f e %f e' -> %f\n", x, y, z);
    	}
    }
    Output:
    codice:
    [vincenzo]$ gcc -Wall -W -pedantic -O3 perm.c -o perm
    [vincenzo]$ ./perm
    5 8 13 21 
    Il quadrato della differenza tra 13 e 8 e' -> 25.000000
    La meta' del quadrato della differenza tra 13 e 5 e' -> 32.000000
    La somma tra 25.000000 e 32.000000 e' -> 57.000000
    Il quadrato della differenza tra 21 e 13 e' -> 64.000000
    La meta' del quadrato della differenza tra 21 e 8 e' -> 84.500000
    La somma tra 64.000000 e 84.500000 e' -> 148.500000
    5 8 21 13 
    Il quadrato della differenza tra 21 e 8 e' -> 169.000000
    La meta' del quadrato della differenza tra 21 e 5 e' -> 128.000000
    La somma tra 169.000000 e 128.000000 e' -> 297.000000
    Il quadrato della differenza tra 13 e 21 e' -> 64.000000
    La meta' del quadrato della differenza tra 13 e 8 e' -> 12.500000
    La somma tra 64.000000 e 12.500000 e' -> 76.500000
    5 13 8 21 
    Il quadrato della differenza tra 8 e 13 e' -> 25.000000
    La meta' del quadrato della differenza tra 8 e 5 e' -> 4.500000
    La somma tra 25.000000 e 4.500000 e' -> 29.500000
    Il quadrato della differenza tra 21 e 8 e' -> 169.000000
    La meta' del quadrato della differenza tra 21 e 13 e' -> 32.000000
    La somma tra 169.000000 e 32.000000 e' -> 201.000000
    5 13 21 8 
    Il quadrato della differenza tra 21 e 13 e' -> 64.000000
    La meta' del quadrato della differenza tra 21 e 5 e' -> 128.000000
    La somma tra 64.000000 e 128.000000 e' -> 192.000000
    Il quadrato della differenza tra 8 e 21 e' -> 169.000000
    La meta' del quadrato della differenza tra 8 e 13 e' -> 12.500000
    La somma tra 169.000000 e 12.500000 e' -> 181.500000
    5 21 13 8 
    Il quadrato della differenza tra 13 e 21 e' -> 64.000000
    La meta' del quadrato della differenza tra 13 e 5 e' -> 32.000000
    La somma tra 64.000000 e 32.000000 e' -> 96.000000
    Il quadrato della differenza tra 8 e 13 e' -> 25.000000
    La meta' del quadrato della differenza tra 8 e 21 e' -> 84.500000
    La somma tra 25.000000 e 84.500000 e' -> 109.500000
    5 21 8 13 
    Il quadrato della differenza tra 8 e 21 e' -> 169.000000
    La meta' del quadrato della differenza tra 8 e 5 e' -> 4.500000
    La somma tra 169.000000 e 4.500000 e' -> 173.500000
    Il quadrato della differenza tra 13 e 8 e' -> 25.000000
    La meta' del quadrato della differenza tra 13 e 21 e' -> 32.000000
    La somma tra 25.000000 e 32.000000 e' -> 57.000000
    8 5 13 21 
    Il quadrato della differenza tra 13 e 5 e' -> 64.000000
    La meta' del quadrato della differenza tra 13 e 8 e' -> 12.500000
    La somma tra 64.000000 e 12.500000 e' -> 76.500000
    Il quadrato della differenza tra 21 e 13 e' -> 64.000000
    La meta' del quadrato della differenza tra 21 e 5 e' -> 128.000000
    La somma tra 64.000000 e 128.000000 e' -> 192.000000
    8 5 21 13 
    Il quadrato della differenza tra 21 e 5 e' -> 256.000000
    La meta' del quadrato della differenza tra 21 e 8 e' -> 84.500000
    La somma tra 256.000000 e 84.500000 e' -> 340.500000
    Il quadrato della differenza tra 13 e 21 e' -> 64.000000
    La meta' del quadrato della differenza tra 13 e 5 e' -> 32.000000
    La somma tra 64.000000 e 32.000000 e' -> 96.000000
    8 13 5 21 
    Il quadrato della differenza tra 5 e 13 e' -> 64.000000
    La meta' del quadrato della differenza tra 5 e 8 e' -> 4.500000
    La somma tra 64.000000 e 4.500000 e' -> 68.500000
    Il quadrato della differenza tra 21 e 5 e' -> 256.000000
    La meta' del quadrato della differenza tra 21 e 13 e' -> 32.000000
    La somma tra 256.000000 e 32.000000 e' -> 288.000000
    8 13 21 5 
    Il quadrato della differenza tra 21 e 13 e' -> 64.000000
    La meta' del quadrato della differenza tra 21 e 8 e' -> 84.500000
    La somma tra 64.000000 e 84.500000 e' -> 148.500000
    Il quadrato della differenza tra 5 e 21 e' -> 256.000000
    La meta' del quadrato della differenza tra 5 e 13 e' -> 32.000000
    La somma tra 256.000000 e 32.000000 e' -> 288.000000
    8 21 13 5 
    Il quadrato della differenza tra 13 e 21 e' -> 64.000000
    La meta' del quadrato della differenza tra 13 e 8 e' -> 12.500000
    La somma tra 64.000000 e 12.500000 e' -> 76.500000
    Il quadrato della differenza tra 5 e 13 e' -> 64.000000
    La meta' del quadrato della differenza tra 5 e 21 e' -> 128.000000
    La somma tra 64.000000 e 128.000000 e' -> 192.000000
    8 21 5 13 
    Il quadrato della differenza tra 5 e 21 e' -> 256.000000
    La meta' del quadrato della differenza tra 5 e 8 e' -> 4.500000
    La somma tra 256.000000 e 4.500000 e' -> 260.500000
    Il quadrato della differenza tra 13 e 5 e' -> 64.000000
    La meta' del quadrato della differenza tra 13 e 21 e' -> 32.000000
    La somma tra 64.000000 e 32.000000 e' -> 96.000000
    13 8 5 21 
    Il quadrato della differenza tra 5 e 8 e' -> 9.000000
    La meta' del quadrato della differenza tra 5 e 13 e' -> 32.000000
    La somma tra 9.000000 e 32.000000 e' -> 41.000000
    Il quadrato della differenza tra 21 e 5 e' -> 256.000000
    La meta' del quadrato della differenza tra 21 e 8 e' -> 84.500000
    La somma tra 256.000000 e 84.500000 e' -> 340.500000
    13 8 21 5 
    Il quadrato della differenza tra 21 e 8 e' -> 169.000000
    La meta' del quadrato della differenza tra 21 e 13 e' -> 32.000000
    La somma tra 169.000000 e 32.000000 e' -> 201.000000
    Il quadrato della differenza tra 5 e 21 e' -> 256.000000
    La meta' del quadrato della differenza tra 5 e 8 e' -> 4.500000
    La somma tra 256.000000 e 4.500000 e' -> 260.500000
    13 5 8 21 
    Il quadrato della differenza tra 8 e 5 e' -> 9.000000
    La meta' del quadrato della differenza tra 8 e 13 e' -> 12.500000
    La somma tra 9.000000 e 12.500000 e' -> 21.500000
    Il quadrato della differenza tra 21 e 8 e' -> 169.000000
    La meta' del quadrato della differenza tra 21 e 5 e' -> 128.000000
    La somma tra 169.000000 e 128.000000 e' -> 297.000000
    13 5 21 8 
    Il quadrato della differenza tra 21 e 5 e' -> 256.000000
    La meta' del quadrato della differenza tra 21 e 13 e' -> 32.000000
    La somma tra 256.000000 e 32.000000 e' -> 288.000000
    Il quadrato della differenza tra 8 e 21 e' -> 169.000000
    La meta' del quadrato della differenza tra 8 e 5 e' -> 4.500000
    La somma tra 169.000000 e 4.500000 e' -> 173.500000
    13 21 5 8 
    Il quadrato della differenza tra 5 e 21 e' -> 256.000000
    La meta' del quadrato della differenza tra 5 e 13 e' -> 32.000000
    La somma tra 256.000000 e 32.000000 e' -> 288.000000
    Il quadrato della differenza tra 8 e 5 e' -> 9.000000
    La meta' del quadrato della differenza tra 8 e 21 e' -> 84.500000
    La somma tra 9.000000 e 84.500000 e' -> 93.500000
    13 21 8 5 
    Il quadrato della differenza tra 8 e 21 e' -> 169.000000
    La meta' del quadrato della differenza tra 8 e 13 e' -> 12.500000
    La somma tra 169.000000 e 12.500000 e' -> 181.500000
    Il quadrato della differenza tra 5 e 8 e' -> 9.000000
    La meta' del quadrato della differenza tra 5 e 21 e' -> 128.000000
    La somma tra 9.000000 e 128.000000 e' -> 137.000000
    21 8 13 5 
    Il quadrato della differenza tra 13 e 8 e' -> 25.000000
    La meta' del quadrato della differenza tra 13 e 21 e' -> 32.000000
    La somma tra 25.000000 e 32.000000 e' -> 57.000000
    Il quadrato della differenza tra 5 e 13 e' -> 64.000000
    La meta' del quadrato della differenza tra 5 e 8 e' -> 4.500000
    La somma tra 64.000000 e 4.500000 e' -> 68.500000
    21 8 5 13 
    Il quadrato della differenza tra 5 e 8 e' -> 9.000000
    La meta' del quadrato della differenza tra 5 e 21 e' -> 128.000000
    La somma tra 9.000000 e 128.000000 e' -> 137.000000
    Il quadrato della differenza tra 13 e 5 e' -> 64.000000
    La meta' del quadrato della differenza tra 13 e 8 e' -> 12.500000
    La somma tra 64.000000 e 12.500000 e' -> 76.500000
    21 13 8 5 
    Il quadrato della differenza tra 8 e 13 e' -> 25.000000
    La meta' del quadrato della differenza tra 8 e 21 e' -> 84.500000
    La somma tra 25.000000 e 84.500000 e' -> 109.500000
    Il quadrato della differenza tra 5 e 8 e' -> 9.000000
    La meta' del quadrato della differenza tra 5 e 13 e' -> 32.000000
    La somma tra 9.000000 e 32.000000 e' -> 41.000000
    21 13 5 8 
    Il quadrato della differenza tra 5 e 13 e' -> 64.000000
    La meta' del quadrato della differenza tra 5 e 21 e' -> 128.000000
    La somma tra 64.000000 e 128.000000 e' -> 192.000000
    Il quadrato della differenza tra 8 e 5 e' -> 9.000000
    La meta' del quadrato della differenza tra 8 e 13 e' -> 12.500000
    La somma tra 9.000000 e 12.500000 e' -> 21.500000
    21 5 13 8 
    Il quadrato della differenza tra 13 e 5 e' -> 64.000000
    La meta' del quadrato della differenza tra 13 e 21 e' -> 32.000000
    La somma tra 64.000000 e 32.000000 e' -> 96.000000
    Il quadrato della differenza tra 8 e 13 e' -> 25.000000
    La meta' del quadrato della differenza tra 8 e 5 e' -> 4.500000
    La somma tra 25.000000 e 4.500000 e' -> 29.500000
    21 5 8 13 
    Il quadrato della differenza tra 8 e 5 e' -> 9.000000
    La meta' del quadrato della differenza tra 8 e 21 e' -> 84.500000
    La somma tra 9.000000 e 84.500000 e' -> 93.500000
    Il quadrato della differenza tra 13 e 8 e' -> 25.000000
    La meta' del quadrato della differenza tra 13 e 5 e' -> 32.000000
    La somma tra 25.000000 e 32.000000 e' -> 57.000000

  10. #10
    Il primo dubbio è:
    devo creare un vettore di n numeri generati a caso e qui li metto i numeri.

    poi per il calcolo, ogni permutazione fa il calcolo che partendo dal terzo elemento che non è v[3] ma v[2] dovrebbe essere, giusto?
    il calcolo è intero ossia:

    per esempio se ho il vettore : 1,5,7,3

    dovrebbe fare questo calcolo: (7-5)^2 + 1/2(7-1)^2 + (3-7)^2 + 1/2(3-5)^2 = 40

    ed invertendo il 5 e 7 ottengo: 24

    poi devo tenere conto del risultato ottenuto, ossia devo memorizzare il vettore che ha ottenuto il risultato migliore, ossia quello più piccolo, cioè 24, quindi bisognerebbe confrontare questi risultati e stampare il vettore con la relativa cifra..
    lo devo tenere conto nella funzione onchange? grazie..

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.