Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di bonobo
    Registrato dal
    Sep 2008
    Messaggi
    103

    [JAVA]Generatore combinazioni

    ciao a tutti non so se il titolo è appropiato ma non sapevo che altro mettere...
    allora ho un problema,devo fare un programmino in java che dato un array di char...
    che ne so:

    {"a","b","c","d"}

    mi dia tutte le combinazioni possibili immaginabili di 2,3....n lettere che decido io!!
    ad esempio se inserisco 2:
    dovrebbe uscire una cosa cosi...

    aa ab ac ad
    ba bb bc bd
    ca cb cc cd
    da db dc dd

    se inserisco 3:

    aaa aab aac aad
    aba abc abd abb ...etcetc... :master: ..sto gia andando in confusione!!

    è una cosa fattibile??o ci sarebbero troppi cicli??
    preciso io non voglio dati 4 valori che mi si facciano le combinazioni di quei 4 valori..
    ovvero 4!...e quindi 24 combinazioni...
    la lunghezza delle combinazioni la vorrei decidere io...

    io alla fine avro un array di con circa 6 lettere,e voglio prendere combinazioni da 3 e da 4...

    qualcuno puo aiutarmi??



    graaaaazie!!

  2. #2
    Devi crearti un metodo ricorsivo dove passerei le parti dell'array da considerare (direzione, indici, profondità, lettere...) e poi in testa ci poni la condizione di stop [oltre che al raggiungimento della fine array anche della lunghezza del risultato / profondità raggiunta].

    I risultati poi li puoi tranquillamente salvare e processarla a fine procedura. Questo a livello teorico, penso che di codice in rete lo trovi ma se riesci a capirlo è meglio..

    Intanto hai provato a cercare nel forum? questo può esserti di aiuto? http://forum.html.it/forum/showthread/t-852260.html
    Ondare, il mio blog!

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: [JAVA]Generatore combinazioni

    Originariamente inviato da bonobo
    {"a","b","c","d"}

    mi dia tutte le combinazioni possibili immaginabili di 2,3....n lettere che decido io!!
    ad esempio se inserisco 2:
    dovrebbe uscire una cosa cosi...

    aa ab ac ad
    ba bb bc bd
    ca cb cc cd
    da db dc dd

    se inserisco 3:

    aaa aab aac aad
    aba abc abd abb ...etcetc... :master: ..sto gia andando in confusione!!
    Si chiamano "disposizioni con ripetizioni". Il numero totale di sequenze è: n elevato k. Dove n è il numero di elementi e k (la "classe") è il numero di elementi estratti.

    Nel tuo primo esempio: 4^2 = 16, nel tuo secondo esempio: 4^3 = 64

    Originariamente inviato da bonobo
    è una cosa fattibile??o ci sarebbero troppi cicli??
    La questione è la seguente. Se k è fisso e prestabilito, il tutto si ridurrebbe a fare k cicli innestati.

    Se k è 2 (tuo primo esempio):

    codice:
    public class Prova {
        public static void main(String[] args) {
            String[] elem = { "a", "b", "c", "d" };
    
            for (int i = 0; i < elem.length; i++) {
                for (int j = 0; j < elem.length; j++) {
                    System.out.println("sequenza " + elem[ i] + elem[j]);
                }
            }
        }
    }
    Se k fosse 3, dovresti avere 3 cicli innestati. Cosa intuisci? Che questo "cablare" l'annidamento dei cicli funziona ovviamente solo se sai a priori il valore di k e appunto puoi "cablare" nel sorgente questa struttura di cicli.

    Non ti va bene? Ovvio, così non puoi trattare un k arbitrario. Il sorgente è quello ... dovresti cambiarlo!! È una questione "strutturale".

    Ma c'è un'altra soluzione, logica, lineare e generica. I tuoi elementi nell'array hanno un indice, nel tuo esempio sopra per 4 elementi, hai indici 0, 1, 2 e 3.

    Traduci quelle sequenze di lettere nelle sequenze degli indici:

    00
    01
    02
    03
    10
    11
    12
    13
    20
    21
    ...
    ...

    Che cosa ti sembra? Visto così sembra un banale sistema di numerazione, dove ogni "cifra" va da 0 a 3. Arrivato al 3, se si aggiunge 1, si ritorna a 0 e si incrementa la cifra successiva.
    Esattamente come succede nel sistema di numerazione decimale (che invece va fino a 9)!!!

    Puoi realizzare una tale progressione degli indici??? Certo che si può fare. Basta avere k variabili numeriche, inizialmente a 0. Incrementi l'indice meno significativo, quando sei al 3 e incrementi di 1, ritorni a 0 e incrementi la successiva cifra. E così via ....
    Per ogni sequenza di indici, puoi ovviamente avere la sequenza degli elementi!!!

    Il resto lo lascio dedurre e fare a te. Pensaci. Non è difficile .... basta solo ragionare su come realizzare questa progressione degli indici. Ti assicuro che si può fare. E anche bene e in modo estremamente "generico".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  4. #4
    Utente di HTML.it L'avatar di bonobo
    Registrato dal
    Sep 2008
    Messaggi
    103
    wwwwwoww...

    superspiegazione...
    ho capito il concetto..
    e usato gli indici dell'array...cosi è tutto piu semplice....
    SPETTACOLO!!

    gia fatto tutto e perfettamente funzionante!!

    grazie mille!!


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.