Java heap space

beta -  
 beta -
Bonjour,s'il vous plait aider moi de corriger l'erreur "java.lang.OutOfMemoryError: Java heap space".j'utilise java 8
import java.util.ArrayList;

public class A {

	static ArrayList<int[]> permutations(int[] a)  {
		ArrayList<int[]> ret = new ArrayList<int[]>();
		//Consumer<int[]>ret=new Consumer<int[]>();
		permutation(a, 0, ret);
		return ret;
	}

	/*public void permutation(int[] arr, int pos, Consumer<int[]> consumer) {
	    if (arr.length - pos == 1)
	        consumer.accept(arr);
	    else
	        for (int i = pos; i < arr.length; i++) {
	            swap(arr, pos, i);
	            permutation(arr, pos + 1, list);
	            swap(arr, pos, i);
	        }
	}*/

	public static void permutation(int[] arr, int pos, ArrayList<int[]> list) {
	    if (arr.length - pos == 1)
	        list.add(arr.clone());
	    else
	        for (int i = pos; i < arr.length; i++) {
	            swap(arr, pos, i);
	            permutation(arr, pos + 1, list);
	            swap(arr, pos, i);
	        }
	}

	public static void swap(int[] arr, int pos1, int pos2) {
		int h = arr[pos1];
		arr[pos1] = arr[pos2];
		arr[pos2] = h;
	}
	public static void main(String[] args) throws java.lang.Exception {
		int[] a = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,
				30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60};
		
		ArrayList<int[]> list = permutations(a);
		for (int[] s : list) {
			for (int i : s) {
				System.out.print(i+",");
				//G1.add(i);
			}
			System.out.println();
		}
	}
	}


je besoin de récupérer la liste de tous les combinaison pour utilise dans la suite
A voir également:

1 réponse

NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
Tu veux récupérer en mémoire la liste de toutes le combinaisons possible avec 60 items au départ ?

As-tu compté combien de combinaison cela fait ?
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

Le calcul est facile, si n est la taille du tableau de départ, il y aura très exactement n! résultats dans la liste. Sachant que chaque résultat est un tableau de taille n, ça nous fait donc environ n*n! entiers à stocker.

On multiplie ça par 4 octets chacun, j'oublie volontairement la taille du tableau et de la liste parce que c'est plus dur de les calculer, mais en gros il faut multiplier encore par 1.5 disons donc environ 6*n*n! octets en mémoire.

Pour n=10, environ 200 Mo.
Pour n=11, environ 2,5 Go
Pour n=12, environ 32 Go
Pour n=60, environ 1,5 TTTTTTTo (téra de téra de téra... de téra octets)

Remarque : pour n=10 mon ordinateur a mis à peu près 1 seconde pour faire le calcul, donc pour n=60 on pourrait attendre un résultat d'ici...
435 000 GGGGGGG années (milliards de milliards ... de milliards d'années)

De toute façon, tu aurais eu un ArrayOutOfBoundsException bien avant car une ArrayList ne peux pas contenir plus de 2^31-1 valeurs. Donc même si tu avais 450 Go de mémoire tu ne pourrais pas faire le calcul pour n=13...
0
beta
 
je veux récupérer en mémoire la liste de toutes le combinaisons possible avec tous les items au départ
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
As tu au moins lu les réponses que l'on t'as faite avant de paraphraser ta question ?
0
beta > KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention  
 
oui merci mais je recherche de trouver un truc pour que cela fonctionne en quelque sorte
0
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
A moins d'écrire dans un fichier (et avoir un gros disque dur), à la place de garder en mémoire, je ne vois pas.

Mais je ne vois pas l'intérêt d'avoir toutes les combinaisons possibles.
0