Permutazione

di il
10 risposte

Permutazione

Salve a tutti, mi è stato assegnato un esercizio dove si deve generare una stringa binaria casuale di 16 elementi e metterla in un vettore fino a qui nessun problema, poi si devono mescolare casualmente le posizioni e qua che mi blocco come si può fare ciò evitando che venga scelta due volte la stessa posizione? Se qualcuno mi può dare un esempio di codice C ne sarei grato.
Grazie in anticipo

10 Risposte

  • Re: Permutazione

    Dovresti implementare un algoritmo ricorsivo che, preso il vettore di input, generi tutte le permutazioni (con ripetizione) di esso. Dovresti crearti dei vettori di mark e soluzione, nonchè ordinare il vettore di partenza (utile per i simboli ripetuti) e inizializzarli opportunamente. Adesso sei pronto per mettere in piedi la funzione ricorsiva che fa il lavoro che ti serve, spero averti dato l'idea di lavoro.
  • Re: Permutazione

    Spiega un po' meglio ... facci vedere la parte di codice che hai già scritto per la generazione della stringa. Facci vedere quale dovrebbe essere il risultato ...

    Penso che possa esserci soluzione più semplice ...
  • Re: Permutazione

    oregon ha scritto:


    Spiega un po' meglio ... facci vedere la parte di codice che hai già scritto per la generazione della stringa. Facci vedere quale dovrebbe essere il risultato ...

    Penso che possa esserci soluzione più semplice ...
    Int main ()
    Int vet[15],I;

    srand(time(NULL));
    for(I=0;I<=15;I++){
    vet[I]=rand()%2;
    printf(“%d”,Vet[I]);
    }
    E fino a qui è facile mi crea 16 cifre tra 0 e 1 casuali, ma non ho proprio idea di come mischiarli casualmente
  • Re: Permutazione

    Facile ma sbagliato ... deve essere

    int vet[16],I;

    e

    printf(“%d”,vet[I]);

    Ad esempio avrai

    1000101010101011

    A partire da questo, ne devi ottenere un qualsiasi altro mischiando le cifre? Uno solo?
  • Re: Permutazione

    oregon ha scritto:


    Facile ma sbagliato ... deve essere

    int vet[16],I;

    e

    printf(“%d”,vet[I]);

    Ad esempio avrai

    1000101010101011

    A partire da questo, ne devi ottenere un qualsiasi altro mischiando le cifre? Uno solo?


    Si devo permutarlo una sola volta non mi servono tutte le combinazioni, però non saprei come fare perchè se gli metto un indice rand si creano conflitti perchè esce più volte lo stesso come potrei fare
  • Re: Permutazione

    Scegli due valori a caso tra 0 e 15 che chiamerai i e j.
    Scambia tra loro l'elemento i e j del vettore.
    Fai queste operazioni per un numero di volte a caso (tra 50 e 100 ad esempio) in un ciclo for.
  • Re: Permutazione

    Cioè data la sequenza : 1000101010101011

    dovresti generarne un'altra casuale che non sia quella ma che sia ad esempio: 0100101010101011 ?

    Oppure data la sequenza di partenza devi manipolarla per generarne un'altra, ad esempio la seconda?
  • Re: Permutazione

    SVNiko ha scritto:


    Cioè data la sequenza : 1000101010101011

    dovresti generarne un'altra casuale che non sia quella ma che sia ad esempio: 0100101010101011 ?

    Oppure data la sequenza di partenza devi manipolarla per generarne un'altra, ad esempio la seconda?
    Devo manipolare la prima
  • Re: Permutazione

    oregon ha scritto:


    Spiega un po' meglio ... Facci vedere quale dovrebbe essere il risultato ...
    Facci quest'esempio che onestamente non è che abbia capito molto fino ad ora.

    Se devi manipolare la prima basta scambiare due qualsiasi degli elementi ed hai una permutazione.
  • Re: Permutazione

    oregon ha scritto:


    Scegli due valori a caso tra 0 e 15 che chiamerai i e j.
    Scambia tra loro l'elemento i e j del vettore.
    Fai queste operazioni per un numero di volte a caso (tra 50 e 100 ad esempio) in un ciclo for.
    Grazie mille mi hai fatto venire l'idea!!!
Devi accedere o registrarti per scrivere nel forum
10 risposte