Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1

    [C] Generazione Combinazioni ???

    Per calcolo dovrei fare un generatore di Combinazioni...
    Solo che non so' quasi da dove iniziare...

    Dovrei generare tutte le combinazioni di n lettere...
    Io Ho provato a farlo con due e sembra funzionare...
    Solo che questo metodo non mi sembra il migliore anche perche'
    non saprei come fare n cicli...

    Qualcuno sa' darmi una mano... Grazie.
    codice:
    #include <stdio.h>
    
    #define START		 97
    #define END	        122
    
    int main() {
    	unsigned short int i, j;
    	unsigned short int start = 0;
    	
    	for (j=START; j <= END; j++) {
    		start = 0;
    		for (i=START; i <= END; i++) {
    			if (i == START && !start) {
    				i = 0;
    				start = 1;
    			}
    			printf("%c%c\n", j, i);
    			if (i == 0) i = START;
    		}		
    	}
    	return (0);
    }
    PoWered by:
    Gentoo 1.5.3 - Kernel 2.6.7
    Debian Sid - Kernel 2.6.7 - Bash 3.0
    Slackware current - Kernel 2.6.7

  2. #2
    chiarisci. vuoi calcolare tipo tutte le combinazioni (o permutazioni?) sull'insieme di tutte le lettere? Cioé avendo 25 elementi(lettere) vuoi avere restituite tutte le parole di lunghezza k che si ottengono alternando tutte le lettere?
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  3. #3
    Utente di HTML.it L'avatar di Iena87
    Registrato dal
    Dec 2003
    Messaggi
    429
    Credo si riferisca alle permutazioni, dovendo generare delle combinazioni dove date n lettere, queste devono essere cambiate d'ordine...almeno credo


    La formula per il calcolo delle permutazioni č la seguente:

    Pn= n! / n1!*n2!...

    n! č facile ricavarlo, il problema sono le n! di sotto, che indicano le lettere che si ripetono in una parola...come si fa?

  4. #4
    per quanto riguarda le permutazioni ho trovato questa:
    Permutazioni:
    codice:
    Supponiamo di avere 3 oggetti {a,b,c}; 
    questi potranno essere ordinati in 6 modi diversi:
    
    1 = {a,b,c} 2 = {b,c,a} 3 = {c,a,b} 
    4 = {a,c,b} 5 = {b,a,c} 6 = {c,b,a} 
    
    Quindi le permutazioni di 3 oggetti sono 6.
    P(N) = N!

    Combinazioni:
    codice:
    Supponiamo di avere 3 oggetti {a,b,c} e di prenderli a gruppi di 2; 
    i modi con cui possiamo farlo sono: 
    
    1 = {a,b} 2 = {a,c} 3 = {b,c} 
    
    Quindi le combinazioni di 3 oggetti di classe 2 (= presi a 2 per volta) sono 3.
    C(N,k) = N!/(N-k)!

    Ma mi sono impantanato nel generare le Combinazioni vere e proprie, mo provo con le permutazioni

    edit non permutazioni, volevo dire disposizioni N!/(N-k)!
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  5. #5
    Originariamente inviato da AnĒkin
    C(N,k) = N!/(N-k)!
    No,le COMBINAZIONI si calcolano con la formula:

    n!/(n-k)!*k!

    quelle sono le DISPOSIZIONI ...anche se c'č una formula "migliore",nel senso + adatta per risolvere questo problema a livello informatico e con cui si puų sfruttare la ricorsione.

    Sto scrivendo l'algortimo in c...tra poco te lo posto



    ps parliamo sempre di combinazioni e disposizioni SEMPLICI...cioč senza ripetizione
    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  6. #6
    Applichiamo le DISPOSIZIONI in modo tale da ottenere su n lettere(25 quelle dell'alfabeto) delle parole di lunghezza k.

    Essendo DISPOSIZIONI una parola differisce dall'altra non solo per l'ordine,ma anche per gli elementi che le compongono.(come giusto DEVE essere per quanto riguarda le parole...infatti "aba" e "baa" non sono uguali o no? :gren: )
    La formula č:
    D(n,k) = n * (n-1) * (n-2)* ... * (n-k+1)

    codice:
    #include <stdio.h>
    int disposizioni_semplici(int ,int ,int );
    
    const int n=25; //lettere alfabeto italiano
    
    int main(){
    
    int k=0;//classe
    printf("\nInserisci la lunghezza delle parole da considerare\n");
    scanf("%d",&k);
    
    if (n>k)  printf("\nCon %d lettere puoi avere %d parole di lunghezza %d",n,disposizioni_semplici(k,n,n),k);
      else printf("\nImpossibile eseguire l'operazione\n");
    
    return 0;
    }
    
    /* calcolo in modo ricorsivo*/
    int disposizioni_semplici(int k,int n,int m){
    if ( n== m-k ) return 1;
    else 
     return ( n*disposizioni_semplici(k,n-1,m) );
    }
    provalo cmq

    ciao
    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  7. #7
    a me' non interessa il numero di combinazioni possibili...
    mi interessano le combinazioni vere e proprie...

    a
    aa
    ab
    ac
    ..
    PoWered by:
    Gentoo 1.5.3 - Kernel 2.6.7
    Debian Sid - Kernel 2.6.7 - Bash 3.0
    Slackware current - Kernel 2.6.7

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Originariamente inviato da andrea_NET-_DSL
    Applichiamo le DISPOSIZIONI in modo tale da ottenere su n lettere(25 quelle dell'alfabeto) delle parole di lunghezza k.
    PS: Le lettere dell'alfabeto sono 26. Quelle dell'alfabeto italiano sono 21.


    Ciao.
    "Perchč spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Per impostare un algoritmo (ricorsivo) usa la seguente osservazione: una combinazione di lunghezza n la ottieni inserendo un qlsiasi carattere in una qualsiasi posizione in una combinazione di lunghezza n - 1, ovvero tutte le combinazioni di lunghezza n le ottieni concatenando uno alla volta tutti i caratteri in tutte le n posizionni di tutte le combinazioni di lunghezza n - 1.



  10. #10
    L'ho riletta 32 volte e ho capito ancora poco
    PoWered by:
    Gentoo 1.5.3 - Kernel 2.6.7
    Debian Sid - Kernel 2.6.7 - Bash 3.0
    Slackware current - Kernel 2.6.7

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.