Java heap space

Fermé
beta - 2 mai 2015 à 13:16
 beta - 2 mai 2015 à 19:42
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 15172 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 11 décembre 2024 350
2 mai 2015 à 13:27
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 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 2/05/2015 à 16:23
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
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 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
2 mai 2015 à 18:43
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 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024
2 mai 2015 à 19:22
oui merci mais je recherche de trouver un truc pour que cela fonctionne en quelque sorte
0
NHenry Messages postés 15172 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 11 décembre 2024 350
2 mai 2015 à 19:26
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