Advertisement
Guest User

Permutazioni.java

a guest
Dec 6th, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.93 KB | None | 0 0
  1. package main;
  2.  
  3. class Permutazioni {
  4.   private static int LUNGHEZZA_PERMUTAZIONE;
  5.   private static int N_SIMBOLI;
  6.   private static int[] basi;
  7.   private static int[] permutazione_iniziale;
  8.   private static int[] permutazione_finale;
  9.   public static int[] getPermutazioneFinalestatic(){
  10.     return permutazione_finale;
  11. }
  12.  
  13.  
  14.   /**
  15.    * Aggiungi i commenti sui parametri in input e spiega cosa ristorna il metodo nell'apposita riga.
  16.    * @param lunghezza_permutazione
  17.    * @param n_simboli
  18.    */
  19.   public static void inizializza(int lunghezza_permutazione, int n_simboli){
  20.     LUNGHEZZA_PERMUTAZIONE = lunghezza_permutazione;
  21.     N_SIMBOLI = n_simboli;
  22.     basi = new int[LUNGHEZZA_PERMUTAZIONE];
  23.     permutazione_iniziale = new int[LUNGHEZZA_PERMUTAZIONE];
  24.     permutazione_finale = new int[LUNGHEZZA_PERMUTAZIONE];
  25.     for (int i = 0; i < LUNGHEZZA_PERMUTAZIONE; i++){
  26.       basi[i] = N_SIMBOLI;
  27.       permutazione_iniziale[i] = 0;
  28.       permutazione_finale[i] = N_SIMBOLI-1;
  29.     }
  30.   }
  31.  
  32.   // permutazioni di uguale lunghezza
  33.  
  34.   /**
  35.    * Aggiungi i commenti sui parametri in input e spiega cosa ristorna il metodo nell'apposita riga.
  36.    * @param permutazione1
  37.    * @param permutazione2
  38.    * @return
  39.    */
  40.   public static int[] sommaPermutazioni(int[] permutazione1, int[] permutazione2) {
  41.     int riporto = 0;
  42.     int somma = 0;
  43.     int[] ris = new int[LUNGHEZZA_PERMUTAZIONE];
  44.  
  45.     for(int i = LUNGHEZZA_PERMUTAZIONE-1; i >= 0; i--){
  46.       somma = (permutazione1[i]+permutazione2[i]+riporto)%basi[i];
  47.       riporto = (permutazione1[i]+permutazione2[i]+riporto)/basi[i];
  48.       ris[i] = somma;
  49.     }
  50.     return ris;
  51.   }
  52.  
  53.   // restituisce una copia della permutazione iniziale
  54.   public static int[] iniziale() {
  55.     int[] ris = new int[LUNGHEZZA_PERMUTAZIONE];
  56.     for (int i = 0; i < LUNGHEZZA_PERMUTAZIONE; i++){
  57.       ris[i] = permutazione_iniziale[i];
  58.     }
  59.     return ris;
  60.   }
  61.  
  62.   /**
  63.    * Aggiungi i commenti sui parametri in input e spiega cosa ristorna il metodo nell'apposita riga.
  64.    * @param permutazione
  65.    * @param n_passi
  66.    * @return
  67.    */
  68.   public static int[] successiva(int[] permutazione, int n_passi) {
  69.     int N = permutazione.length;
  70.     int[] ris = permutazione;
  71.     for (int i = 0; i < n_passi; i++)
  72.       ris = successiva(ris);
  73.     return ris;
  74.   }
  75.  
  76.   /**
  77.    * Aggiungi i commenti sui parametri in input e spiega cosa ristorna il metodo nell'apposita riga.
  78.    * @param permutazione
  79.    * @return
  80.    */
  81.   public static boolean eFinale(int[] permutazione) {
  82.     return uguali(permutazione, permutazione_finale);
  83.   }
  84.  
  85.   /**
  86.    * Aggiungi i commenti sui parametri in input e spiega cosa ristorna il metodo nell'apposita riga.
  87.    * @param permutazione
  88.    * @return
  89.    */
  90.   public static int[] successiva(int[] permutazione) {
  91.     int[] uno = new int[]{ 0, 0, 0, 0, 0, 1};
  92.     return sommaPermutazioni(permutazione, uno);
  93.   }
  94.  
  95.   /**
  96.    * Aggiungi i commenti sui parametri in input e spiega cosa ristorna il metodo nell'apposita riga.
  97.    * @param permutazione
  98.    */
  99.   public static void stampa(int[] permutazione){
  100.     StringBuffer out = new StringBuffer(LUNGHEZZA_PERMUTAZIONE*6);
  101.  
  102.     // Qui utilizza un ciclo per concatenare allp string buffer out
  103.     // tutti i numeri che stanno nelle celle dell'array, separati da uno spazio l'uno dall'altro
  104.  
  105.     System.out.println(out.toString());
  106.   }
  107.  
  108.   /**
  109.    * Aggiungi i commenti sui parametri in input e spiega cosa ristorna il metodo nell'apposita riga.
  110.    * @param seq1
  111.    * @param seq2
  112.    * @return
  113.    */
  114.   public static boolean uguali(int[] seq1, int[] seq2){
  115.     if(seq1.length != seq2.length)
  116.       return false;
  117.  
  118.     // Qui utilizza un ciclo per confrontare i due array cella per cella.
  119.     // Appena trovi due celle alla stessa posizione con contenuto differente ritorna false. ;)
  120.  
  121.     return true;
  122.   }
  123.  
  124.   public static void generaOgniPermutazione(){
  125.     int[] permutazione = iniziale();
  126.  
  127.     // Qui inserisci un ciclo while che ad ogni iterazione
  128.     // 1- stampa l'array permutazione
  129.     // 2- passa alla pemutazione successiva
  130.     // ;)
  131.  
  132.     stampa(permutazione);
  133.   }
  134.  
  135.   /**
  136.    * Aggiungi i commenti sui parametri in input e spiega cosa ristorna il metodo nell'apposita riga.
  137.    * @param permutazione
  138.    * @param pos
  139.    *
  140.    * Questo รจ il metodo ricorsivo per generare le permutazioni.
  141.    * Come vedi utilizza l'overloading !
  142.    *   ;)
  143.    */
  144.   public static void generaOgniPermutazioneRic(int[] permutazione, int pos){
  145.     for (int k = 0; k < N_SIMBOLI; k++){
  146.       permutazione[pos] = k;
  147.       if (pos < permutazione.length - 1)
  148.         generaOgniPermutazioneRic(permutazione, pos+1);
  149.       else // pos == permutazione.length - 1
  150.         stampa(permutazione);
  151.     }
  152.   }
  153.  
  154.   /**
  155.    * Questa รจ la chiamata per avviare il metodo ricorsivo per generare le permutazioni. ;)
  156.    */
  157.  
  158.   public static void generaOgniPermutazioneRic(){
  159.     int[] permutazione = iniziale();
  160.     generaOgniPermutazioneRic(permutazione, 0);
  161.   }
  162.  
  163. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement