Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Algoritmo permutazioni

  1. #1

    Algoritmo permutazioni

    Salve a tutti,
    avrei urgentemente bisogno di un aiuto nella scrittura di un metodo java.

    Ho bisogno di un metodo che:
    - prende in ingresso un array, e un intero k
    - restituisce tutte le possibili combinazioni degli elementi dell' array di lunghezza k

    esempio:
    INPUT -> array (es. char) = {'0','1'}; int k = 3;

    OUTPUT:
    000
    001
    010
    011
    100
    101
    110
    111

    ATTENZIONE!!!
    VOGLIO CHE IL METODO SIA CAPACE DI MEMORIZZARE L'OUTPUT IN QUALCHE MODO (ad esempio in una stringa, in un array o in una matrice). e non di stampare l'output a video (cosa che sono riuscito a fare con un metodo ricorsivo)

    questo è il metodo ricorsivo che stampa a video l'output:

    public static int disp(char[] alf, int k) {
    return disp(alf,k,new String());
    }

    public static int disp(char[] alf, int k, String a) {
    int cont = 0;
    if (a.length() == k) {
    System.out.println(a);
    return 1;
    }
    for (int i = 0; i < alf.length; i++)
    cont += disp(alf,k,a+alf[i]);
    return cont;
    }

    grazie mille...nel frattempo
    -lol-

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Sono "disposizioni con ripetizioni" .... non "permutazioni". E comunque vedi questa discussione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ci sono riuscito...

    Questo è un metodo che, dato un array di n caratteri (in questo caso array di int) e un intero k,
    genera tutte le possibili disposizioni semplici degli n caratteri dell'array su k posizioni, memorizzandole in una lista di array.


    codice:
    import java.util.Arrays;
    import java.util.ArrayList;
    
    class Disp {
    
    //disposizioni semplici di n elementi su k posizioni
    	public static void dispSemplici(int[] arr, int k, ArrayList<char[]> out) {
    		dispSemplici(arr,k,out,new String());		
    	}
    	
    //metodo di supporto per dispSemplici
    	public static void dispSemplici(int[] arr, int k, ArrayList<char[]> out, String a) {
    		if (a.length() == k) {
    			char[] temp = a.toCharArray();
    			out.add(temp);
    			//System.out.println("debug ");   //debug
    			//stampaArrayList(out);           //debug
    			return;
    		}
    		for (int i = 0; i < arr.length; i++) {
    			dispSemplici(arr,k,out,a+arr[i]);
    		}
    	}
    
    //metodo per la stampa di ArrayList<char[]>
    	public static void stampaArrayList(ArrayList<char[]> arrList) {
    		for (char[] temp : arrList)
    			System.out.println(Arrays.toString(temp));
    	}
    
    //metodo main di prova
    public static void main(String[] args) {
    		int[] alf = {1,0};
    		ArrayList<char[]> out = new ArrayList<char[]>();
    		dispSemplici(alf,3,out);
    		System.out.println("dispSemplici");
    		stampaArrayList(out);
    	}
    }
    spero possa essere di aiuto a qualcuno...
    come potete vedere il metodo è ricorsivo e si avvale di un altro metodo ricorsivo il quale implementa l'algoritmo.

    ciao a tutti
    -lol-

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 © 2025 vBulletin Solutions, Inc. All rights reserved.