Calcolo combinatorio e combinazioni semplici spiegazione

 


 

Calcolo combinatorio e combinazioni semplici spiegazione

 

Questo sito utilizza cookie, anche di terze parti. Se vuoi saperne di più leggi la nostra Cookie Policy. Scorrendo questa pagina o cliccando qualunque suo elemento acconsenti all’uso dei cookie.I testi seguenti sono di proprietà dei rispettivi autori che ringraziamo per l'opportunità che ci danno di far conoscere gratuitamente a studenti , docenti e agli utenti del web i loro testi per sole finalità illustrative didattiche e scientifiche.

 

 

 

Le informazioni di medicina e salute contenute nel sito sono di natura generale ed a scopo puramente divulgativo e per questo motivo non possono sostituire in alcun caso il consiglio di un medico (ovvero un soggetto abilitato legalmente alla professione).

 

 

 

 

 

Calcolo combinatorio e combinazioni semplici spiegazione

 CALCOLO COMBINATORIO

Il calcolo combinatorio ha per obiettivo la costruzione di raggruppamenti  di oggetti distinti o no, che secondo un determinato criterio, si possono formare con oggetti di un certo insieme.

Esamineremo i seguenti raggruppamenti:

 

  • Permutazioni semplici
  • Disposizioni semplici
  • Combinazioni semplici
  • Permutazioni con ripetizione
  • Disposizioni con ripetizione
  • Combinazioni con ripetizione

 

 

PERMUTAZIONI SEMPLICI

 

Definizione: Si chiamano permutazioni semplici di n oggetti distinti, tutti i raggruppamenti diversi che si possono formare con gli oggetti dati, rispettando le seguenti proprietà:

  • Ciascun raggruppamento contiene n oggetti.
  • Uno stesso oggetto non può figurare più volte in un raggruppamento.
  • Due qualsiasi raggruppamenti sono da considerarsi distinti quando differiscono solo per l’ordine con cui sono disposti gli elementi.

 

La tabella seguente mostra le permutazioni al variare di n

 

Se n = 2:    1 2;  2 1.    

Se n = 3:    1 2 3; 1 3 2; 2 1 3; 2 3 1; 3 1 2; 3 2 1.

Se n = 4:    1 2 3 4; 1 2 4 3; 1 3 2 4; 1 3 4 2;1 4 2 3; 1 4 3 2;

                  2 1 3 4; 2 1 4 3; 2 3 1 4; 2 3 4 1; 2 4 1 3; 2 4 3 1;

                  3 1 2 4; 3 1 4 2; 3 2 1 4; 3 2 4 1; 3 4 1 2; 3 4 2 1;

                  4 1 2 3; 4 1 3 2; 4 2 1 3; 4 2 3 1; 4 3 1 2; 4 3 2 1;

                  

Si può notare che il numero delle permutazioni in funzione di n è dato da n!, quindi abbiamo nel caso di n=2, 2 permutazioni, per n=3, 6, e per n=4 , 24 permutazioni

 

L’algoritmo che permette di trovare tutte le permutazioni è espresso dalla funzione permuta().

Ci sono due cicli while perché si fa il confronto tra il successivo e il precedente, ma anche tra il valore corrispondente all’indice i trovato e i valori oltre questo indice fino ad n. Le due istruzioni if permettono di uscire dai cicli se è stata trovata un’altra permutazione. Ci sono anche  due funzioni: scambia() e inverso(). La prima serve a scambiare di posto due elementi in un vettore; la seconda consente di invertire gli elementi in un vettore, solo quando è necessario e a partire dall’indice i.

 

 

 

 

 

 

 

function permuta()

{i=n;segnale=false

 while(i>=2)

 {if(a[i]>a[i-1])

   {j=n

    while(j>=i)

     {if(a[j]>a[i-1])

       {segnale=true

        a=scambia(a,j,i-1)

        a=inverso(a,i)

       }

      if(segnale)

       j=i-1

      else

       j=j-1

     }

   }

   if(segnale)

    {i=1

     segnale=false

    }

   else

    i=i-1

  }

}

 

 

function scambia(v,a,b)

{var t

 t=v[a]

 v[a]=v[b]

 v[b]=t

 return v

}

 

function inverso(aa,k)

{var d,q,t

 d=aa.length-1

 q=(d-k-1)/2

 q=Math.floor(q)

 for (i=0;i<=q;i++)

   {

    t=aa[d-i]

    aa[d-i]=aa[k+i]

    aa[k+i]=t

   }

 return aa

}

 

 

Esempi:

n=3

123 132 213 231 312 321  

n=4         

1234 1243 1324 1342 1423 1432 2134 2143 2314 2341 2413 2431 3124 3142 3214 3241 3412 3421 4123 4132 4213 4231 4312 4321

roma roam rmoa rmao raom ramo orma oram omra omar oarm oamr mroa mrao mora moar maro maor arom armo aorm aomr amro amor

 

Per l’immissione dei valori e per la stampa si sono usate degli accorgimenti operativi. Nella funzione immissione vengono inizializzati due vettori: uno (a) che contiene i numeri in progressione e l’altro (s) che contiene i valori effettivamente immessi. Si opera sempre sul vettore a, poi al momento della stampa gli elementi di a saranno gli indici di s.

 

function immissione()

{ p=""

  n=prompt("immetti n","")

  n=Number(n)

  for (i=1;i<=n;i++)

   { a[i]=i

     s[i]=prompt(i,"")

   }

  nperm=fatt(n)

  cont=1

  stampa(n,a)

}

 

function stampa(num,v)

{

  for (i=1;i<=num;i++)

  p=p+s[v[i]]

  p=p+" "

  document.form1.mostra.value=p

}

 

Le funzioni che seguono servono a stampare il numero delle permutazioni, che sappiamo è il fattoriale di n.

 

function fatt()

{var f

 f=1

 for (i=1;i<=n;i++)

 f=f*i

 return f

}

 

 

function stampanumpermutazioni()

{ document.form2.NPermutazioni.value=nperm}

 

Le successive funzioni consentono di eseguire l’algoritmo.

 

function ferma()

{ clearInterval(tempo)

}

 

function calcolaTempo(t)

{

 tempo=setInterval("calcola()",t)

 }

 

function calcola()

{

if (cont==nperm)

   ferma()

 else 

   {cont=cont+1

    permuta()

    stampa(n,a)

   }

 }             

 


Per visualizzare e stampare il programma completo occorre stampare il codice in HTML.

 

            

DISPOSIZIONI SEMPLICI.

 

Definizione : dati n oggetti distinti, e indicato con k un numero intero positivo e minore o uguale a n, si chiamano disposizioni semplici di questi n oggetti, presi a k a k (o di classe k),tutti i raggruppamenti diversi che si possono formare con gli oggetti dati, in modo che valgano le seguenti proprietà:

  1.  ciascun raggruppamento contiene k oggetti;
  2. uno stesso oggetto non può figurare più volte in un raggruppamento;

     3.  due qualsiasi raggruppamenti sono da considerarsi distinti quando uno di essi

    contiene almeno un  oggetto che non figura nell’altro, oppure gli oggetti di un

    raggruppamento sono gli stessi dell’altro ma differiscono per l’ordine con cui sono  

    disposti.

 

Per esempio, le disposizioni di tre oggetti(123) presi a due a due sono: 12; 13; 21; 23; 31; 32. Se facciamo un confronto con le permutazioni di tre oggetti ci si accorge che è possibile ricavare da queste le disposizioni, eliminando gli n-k elementi da ciascuna permutazione cioè:

 

 

 

Permutazioni:  123    132   213   231  312  321

Disposizioni:    12      13     21     23    31    32

 

Allora l’algoritmo per le disposizioni è analogo a quello delle permutazioni con l’accortezza che la stampa verrà fatta solo per i k elementi. Questo algoritmo, però,  va bene se k=n-1, per k<n-1 si hanno dei gruppi ripetuti. Per esempio se n=5 e k =3 alle permutazioni 12345; 12354 corrispondono le disposizioni 123 e 123. Con una funzione che ha il compito di confrontare se due successive disposizioni sono uguali si risolve il problema.

 

function disposizioni()

{i=n;segnale=false

 while(i>=2)

 {if(a[i]>a[i-1])

   {j=n

    while(j>=i)

     {if(a[j]>a[i-1])

       {segnale=true

        a=scambia(a,j,i-1)

        a=inverso(a,i)

       }

      if(segnale)

       j=i-1

      else

       j=j-1

     }

   }

   if(segnale)

    {i=1

     segnale=false

    }

   else

    i=i-1

  }

 

function copia(x,y,kk)

{

 for (c=1;c<=kk;c++)

  if(x[c]!=y[c])

    return false

 return true

 }  

 

La procedura immissione deve essere modificata per consentire l’input della classe k.

 

function immissione()

{ p=""

  n=prompt("immetti n. di elementi","")

  n=Number(n)

  k=prompt("raggruppati a","")

  k=Number(k)

  for (i=1;i<=n;i++)

  { a[i]=i

    s[i]=prompt(i,"")

  }

       ndisp=numeroDisposizioni(n,k)

       cont=1

       stampa(k,a)

}

Permettono di calcolare e stampare il numero delle disposizioni, che è dato dalla formula:

 

Dn,k=n(n-1)(n-2)…(n-k+1).

 

function numeroDisposizioni(n,k)

{var disp

disp=1

 for (i=n-k+1;i<=n;i++)

   disp=disp*i

 return disp

}

 

function stampanumdisposizioni()

{ document.form2.NDisposizioni.value=ndisp}

Permettono di eseguire il programma.

 

function assegna(aa,nn)

 { var bb = new Array()

 for(i=1;i<=nn;i++)

   bb[i]=aa[i]

 return bb 

 }

 

function calcola()

{

if (cont==ndisp)

   ferma()

 else 

   {b=assegna(a,n)

    disposizioni()

    if((copia(a,b,k)==false))

      {cont=cont+1

      stampa(k,a)}

  }

 }             

 

 

Esempi

 

n=4  k=2

12 13 14 21 23 24 31 32 34 41 42 43

 

n=4 k=3

123 124 132 134 142 143 213 214 231 234 241 243 312 314 321 324 341 342 412 413 421 423 431 432

 

n=4 k=4

1234 1243 1324 1342 1423 1432 2134 2143 2314 2341 2413 2431 3124 3142 3214 3241 3412 3421 4123 4132 4213 4231 4312 4321

 

 

 

 

COMBINAZIONI SEMPLICI

 

Definizione : dati n oggetti distinti, e indicato con k un numero intero positivo e minore o uguale a n, si chiamano combinazioni semplici di questi n oggetti, presi a k a k (o di classe k),tutti i raggruppamenti diversi che si possono formare con gli oggetti dati, in modo che valgano le seguenti proprietà:

1.  ciascun raggruppamento contiene k oggetti;

2.  uno stesso oggetto non può figurare più volte in un raggruppamento;

3. l'ordine degli oggetti non ha importanza,e quindi due raggruppamenti sono da  

considerarsi diversi   soltanto quando differiscono tra loro almeno per un oggetto.

 

Per esempio : con n=5 e k=3 si ha:

123; 124; 125; 134; 135; 145; 234; 235; 245; 345.  

 

 Si nota che le combinazioni non sono ordinate in senso decrescente, quindi con la funzione ordinaCrescente si eliminano i raggruppamenti da non considerare.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

function combinazioni()

{i=n;segnale=false

 while(i>=2)

 {if(a[i]>a[i-1])

   {j=n

    while(j>=i)

     {if(a[j]>a[i-1])

       {segnale=true

        a=scambia(a,j,i-1)

        a=inverso(a,i)

       }

      if(segnale)

       j=i-1

      else

       j=j-1

     }

   }

   if(segnale)

    {i=1

     segnale=false

    }

   else

    i=i-1

  }

}

function ordinaCrescente(x,d)

{var i

 for(i=1;i<=d-1;i++)

   if (x[i]>x[i+1])

     return true

 return false

 }   

 

 

Le funzioni seguenti calcolano il numero delle combinazioni, che è dato dalla formula:

 

Cn,k=Dn,k  / k!

 

function numerodisposizioni(n,k)

{var disp

 disp=1

 for (i=n-k+1;i<=n;i++)

  disp=disp*i

 return disp

}

 

function fatt(nn)

{var f

 f=1

 for (i=1;i<=nn;i++)

 f=f*i

 return f

return false 

}

function numerocombinazioni(n,k)

{var comb

 comb=Math.floor(numerodisposizioni(n,k)/fatt(k))

 return comb

}

Questa funzione esegue il programma.

 

function calcola()

{

if (cont==ncomb)

   ferma()

 else 

   {b=assegna(a,n)

    combinazioni()

    if(copia(a,b,k)==false)

       if (ordinaCrescente(a,k)==false)

         {cont=cont+1

          stampa(k,a)

         }

   }

}             

 

 

Esempi:

 

n=4 k=2

12 13 14 23 24 34

 

n=4 k=3

123 124 134 234

 

n=4 k=4

1234

 

 

 

 

PERMUTAZIONI CON RIPETIZIONE

 

Definizione: Dati n oggetti distinti, si chiamano permutazioni con ripetizione tutti i

                   raggruppamenti che si possono formare con gli n oggetti dati, in modo che 

                   valgono le seguenti proprietà:

  • Ogni raggruppamento contiene n oggetti.
  • In ogni raggruppamento uno stesso oggetto può essere ripetuto sino ad un massimo di n volte.
  • Due raggruppamenti sono distinti quando uno di essi contiene almeno un elemento che non compare nell’altro; oppure contengono gli stessi oggetti, ma almeno uno di essi è ripetuto un numero diverso di volte; oppure, pur contenendo gli stessi oggetti e ripetuti lo stesso numero di volte, questi differiscono per l’ordine con cui sono disposti.

 

L’algoritmo che trova le permutazioni è stato costruito cosi:

Si inizia attribuendo ad i il numero massimo degli elementi e se l’elemento corrispondente cioè a[i] è diverso da n allora si incrementa di 1 e si stampa; si continua così finchè l’ultimo elemento non raggiunge il massimo. Quando si verifica questo fatto viene incrementato l’elemento precedente e l’ultimo viene posto ad 1. Si ripete il procedimento.

Notare che nella funzione immissione il vettore a è formato da tutti 1.

 

 

 

 

La funzione è la seguente

 

function permutazioniRip()

{var i,j

 for(i=n;i>=1;i--)

   { if (a[i]!=n)

       {a[i]=a[i]+1

        for(j=i+1;j<=n;j++)

          a[j]=1

        break

        }

    }

 }     

 

Calcola il numero di permutazioni con ripetizione.

La formula è : nn

function numeropermutazioniRip(n,n)

{var permr

 permr=1

 for (i=1;i<=n;i++)

  permr=permr*n

 return permr

}

function stampanumpermutazioniRip()

{ document.form2.NPermutazioniRip.value=nperm}

 

La funzione immissione

 

function immissione()

{ p=""

  n=prompt("immetti n. di elementi","")

  for (i=1;i<=n;i++)

    { a[i]=1

      s[i]=prompt(i,"")}

       nperm=numeropermutazioniRip(n,n)

       cont=1

       stampa(n,a)

}

{

Esegue il programma.

 

function calcola()

{

  if(cont==nperm)

     ferma()

  else  

     {permutazioniRip()

      cont=cont+1

      stampa(n,a)}

 }

 

 

 

 

 

 

 

 

Esempi:

 

N=3

111 112 113 121 122 123 131 132 133 211 212 213 221 222 223 231 232 233 311 312 313 321 322 323 331 332 333

 

 

DISPOSIZIONI CON RIPETIZIONE

 

Definizione: Dati n oggetti distinti, e indicato con k un numero intero positivo (anche maggiore di n) si chiamano disposizioni  con ripetizione di questi n oggetti presi a k a k tutti i raggruppamenti diversi che si possono formare in modo che valgono le seguenti proprietà:

  • Ogni raggruppamento contiene k oggetti.
  • In ogni raggruppamento uno stesso oggetto può essere ripetuto sino ad un

     massimo di k volte.

  • Due raggruppamenti sono distinti quando uno di essi contiene almeno un elemento

     che non compare nell’altro; oppure contengono gli stessi oggetti, ma almeno uno di

     essi è ripetuto un numero diverso di volte; oppure, pur contenendo gli stessi oggetti

         e ripetuti lo stesso numero di volte, questi differiscono per l’ordine con cui sono

         disposti.

 

 

function disposizioniRip()

{var i,j

 for(i=r;i>=1;i--)

   { if (a[i]!=n)

       {a[i]=a[i]+1

        for(j=i+1;j<=r;j++)

          a[j]=1

        if ((copia(a,b,k)==false))

          break

        }

    }

 }     

Calcola il numero delle disposizioni con ripetizione.

La formula è : nk

function numerodisposizioniRip(n,k)

{var dispr

 dispr=1

 for (i=1;i<=k;i++)

  dispr=dispr*n

 return dispr

}

function stampanumdisposizioniRip()

{ document.form2.NDisposizioniRip.value=ndisp}

 

 

function immissione()

{ p=""

  n=prompt("immetti n. di elementi","")

  n=Number(n)

  k=prompt("raggruppati a","")

  k=Number(k)

  for (i=1;i<=n;i++)

    s[i]=prompt(i,"")

  for (i=1;i<=k;i++)

    a[i]=1

       ndisp=numerodisposizioniRip(n,k)

       cont=1

       stampa(k,a)

}

Esegue il programma

 

function calcola()

{ if (k>n)

    r=k

  else

    r=n 

  if(cont==ndisp)

    ferma()

  else 

     { b=assegna(a,k)

       disposizioniRip()

       cont=cont+1

       stampa(k,a)

     }

 }

 

 

 

Esempi

n=4 k=2

11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44

 

n=3 k=2

11 12 13 21 22 23 31 32 33

 

n=3 k=3

111 112 113 121 122 123 131 132 133 211 212 213 221 222 223 231 232 233 311 312 313 321 322 323 331 332 333

 

n=2 k=3

111 112 121 122 211 212 221 222

 

 

 

 

COMBINAZIONI CON RIPETIZIONE

 

Definizione: Dati n oggetti distinti, e indicato con k un numero intero positivo (anche maggiore di n) si chiamano disposizioni  con ripetizione di questi n oggetti presi a k a k tutti i raggruppamenti diversi che si possono formare in modo che valgono le seguenti proprietà:

1.   Ogni raggruppamento contiene k oggetti.

2.  In ogni raggruppamento uno stesso oggetto può essere ripetuto sino ad un

     massimo di k volte.

  • Due raggruppamenti sono distinti quando uno di essi contiene almeno un elemento

     che non compare nell’altro; oppure contengono gli stessi oggetti, ma non sono

     ripetuti lo stesso numero di volte. L’ordine non conta.

 

 

 

function combinazioniRip()

{

 for(i=r;i>=1;i--)

   { if (a[i]!=n)

       {a[i]=a[i]+1

        for(j=i+1;j<=r;j++)

          a[j]=1

        if  (copia(a,b,k)==false)

            break

        }

    }

 }  

function ordcomb(aa,m)

{

  for(i=1;i<=m-1;i++)

    if(aa[i]>aa[i+1])

      return false

  return true

  } 

Calcola il numero delle combinazioni con ripetizione.

 

La formula è:((n+k-1)(n+k-2)…(n+1)n) / k!

 

function numerocombinazioniRip(n,k)

{var tt,q,ncombr

 tt=n+k-1

 q=1

 for (i=tt;i>=n;i--)

   q=q*i

 kfatt=1 

 for (i=k;i>=1;i--)

   kfatt=kfatt*i

 ncombr=q/kfatt

 return ncombr

}

function stampanumcombinazioniRip()

{ document.form2.NCombinazioniRip.value=ncomb}

Esegue il programma.

 

function calcola()

{ if (k>n)

    r=k

  else

    r=n 

  if(cont==ncomb)

     ferma()

  else  

    { b=assegna(a,k)

   combinazioniRip()

    if (ordcomb(a,k)==true)

      {cont=cont+1

      stampa(k,a)}

   }

 }

 

     

Esempi

 

n=4 k=2

11 12 13 14 22 23 24 33 34 44

 

n=3 k=2

11 12 13 22 23 33

 

n=3 k=3

111 112 113 122 123 133 222 223 233 333

 

 

Bibliografia

Page-Wilson, La combinatoria computazionale, Muzzio,1980, Padova.

Nicolò Pintacuda, Algoritmi elementari, Muzzio,1986, Padova.

Mario Battelli, Corso di matematica sperimentale e laboratorio, Le Monnier1994, Milano.

 

 

Fonte: http://www.itisavoia.ch.it/giardina/calccomb/CalcoloCombinatorio.doc

Sito web da visitare: http://www.itisavoia.ch.it

Autore del testo: G.Giardina

Nota : se siete l'autore del testo sopra indicato inviateci un e-mail con i vostri dati , dopo le opportune verifiche inseriremo i vostri dati o in base alla vostra eventuale richiesta rimuoveremo il testo.

Parola chiave google : Calcolo combinatorio e combinazioni semplici spiegazione tipo file : doc

 

Calcolo combinatorio e combinazioni semplici spiegazione

 

 

 

Visita la nostra pagina principale

 

Calcolo combinatorio e combinazioni semplici spiegazione

 

Termini d' uso e privacy

 

 

 

 

Calcolo combinatorio e combinazioni semplici spiegazione