Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Permutazioni array binario

    Salve a tutti, avrei bisogno di un aiuto nella creazione di un algoritmo, spiego il problema:
    ho un array binario di lunghezza 40, questo array contiene sempre e solo quattro valori "1" e i restanti "0" (36 valori a "0"), mi servirebbe generare tutte le possibili permutazioni senza ripetizioni, cioè senza andare a permutare tutti quei valori che porterebbero ad uno stesso array. Poichè l'array è grande, generare 40! permutazioni non è fattibile. Per ora ho trovato una pseudo-soluzione, genero tutte le permutazioni e salvo le posizioni dei 4 valori"1", ogni successiva permutazione controllo questi indici, se sono uguali significa che è una ripetizione. La soluzione funziona ma non è quello che cerco, vorrei proprio non generare ripetizioni. Qaulcuno può darmi una mano?

    Grazie in anticipo

    Cordiali Saluti

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Originariamente inviato da matrix87
    Per ora ho trovato una pseudo-soluzione [...]
    Posta il codice e vedremo di aiutarti indicandoti come correggerlo...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    restano comunque molte, ovvero oltre novantamila: ti serve per forza generarle tutte? Intendo dire, non c'è altro modo di procedere?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    Purtroppo tale configurazioni mi arriva e non posso modificare a priori. Posto la prova che ho fatto ma non riesco a generare tutte le combinazioni, sposto semplicemente i quattro valori 1 nelle diverse posizioni. Sapete aiutarmi per generare tutte le combinazioni (96 mila circa) senza, ovviamente, ripetizioni?
    Grazie ancora

    codice:
    import java.util.*;
    
    public class ProvaSwitch {
    
    	protected static int[] x;
    	protected static int cont = 0;
    
    	public static void main(String[] args) {
    		x = new int[40];
    		x[0] = 1;
    		x[1] = 1;
    		x[2] = 1;
    		x[3] = 1;
    		stampaArray(x);
    		System.out.println();
    		long t1 = System.currentTimeMillis();	
    		for(int i=0; i<4; i++) {
    			scambia();
    		}
    		long t2 = System.currentTimeMillis();
    		long delta = t2  - t1;
    		System.out.println();
    		System.out.println("TEMPO ALGORITMO: " + delta);
    		System.out.println("PERMUTAZIONI: " + cont);
    	}
    
    
    	public static void scambia() {
    		for(int i=0; i<x.length; i++) {
    			cont++;
    			int tmp = x[i];
    			if(i!=x.length-1) {
    				int next = x[i+1];
    				x[i+1] = tmp;
    				x[i] = next;
    				stampaArray(x);
    				System.out.println();
    			}
    		}		
    	}
    
    	public static void stampaArray(int[] x) {
    		for(int i=0; i<x.length; i++) {
    			System.out.print(x[i] + " ");
    		}
    	}		
    	
    }

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.