Minimizar suma de elementos de un array

Preguntas RecientesCategoria: JavaMinimizar suma de elementos de un array
drozz preguntada 1 año antes

Buenas, tengo una duda sobre como afrontar el siguiente problema, supongamos que tengo un array con elementos (2 4 6 8 9 5) y a mi me gustaría dividir ese array en otros 3 array de tamaño 2 y asignar los elementos de estos nuevos array, tal que al sumarlos, y compararlos entre ellos, la diferencia sea minima. Pogo un ejemplo. Supongamos los valores de arriba: 2 4 6 8 9 5 1 Mejor solucion: Primer array: (2 9) Suma 11 Segundo array: (4 8) Suma 12 Tercer array: (6 5) Suma 11 La diferencia con respecto a la media es minima, de 0,5 en cada caso. Una solucion peor seria: Primer array: (8 9) Suma 17 Segundo array: (4 5) Suma 9 Tercer array: (6 2) Suma 8 La suma está mas alejada de la media. Un saludo y gracias

2 Respuestas
snow Staff contestada 1 año antes

pues la respuesta la estas dando tu… si te das cuenta en el resultado que pusiste como correcto siempre sumabas el digito mas pequeño con el mas grande… despues el segundo mas pequeño con el segundo mas grande y asi… entonces lo que se me ocurre es que primero los ordenes de mayor a menor y despues tus arreglos de pares seran de el ultimo numero con el primero, despues el segundo con el penultimo, etc…

import java.util.Vector;
public class MeidaArray {
	
	public MeidaArray() {
	}
	public  int[] insercion (int[] vector) {  
      for (int i=1; i < vector.length; i++) {  
         int aux = vector[i];  
         int j;  
         for (j=i-1; j >=0 && vector[j] > aux; j--){  
              vector[j+1] = vector[j];  
          } 
         vector[j+1] = aux;  
      }  
      return vector;
    }  
    
    public Vector<int[]> arreglosEnPares(int[] arreglo) {
		Vector<int[]> paresDeArreglos = new Vector<int[]>();
		int numeroDeArreglos = arreglo.length /2;
		System.out.println("numeroDeArregloss" + numeroDeArreglos) ;
		int ultimo =  arreglo.length-1;
		for(int i = 0; i < numeroDeArreglos; i++) {
			int [] arregloPar = new int [2];
			arregloPar[0] = arreglo[i];
			arregloPar[1] = arreglo[ultimo];
			paresDeArreglos.add(arregloPar);
			ultimo--;
		}
		return paresDeArreglos;
	}
	public static void main(String... ass) {
		MeidaArray ma = new MeidaArray();
		int[] arreglo = {4,2,3,6,8,4,7,3,1,9,5,0,11,2};
		int[] arregloOrdenado = ma.insercion(arreglo);
		System.out.println("ordenado") ;
		for (int i=0; i < arregloOrdenado.length; i++) {  
			System.out.print(arregloOrdenado[i]+ ",") ;
		}
		Vector<int[]> arreglosEnPares = ma.arreglosEnPares(arregloOrdenado);
		for (int i=0; i < arreglosEnPares.size(); i++) {  
			int[] a = arreglosEnPares.get(i);
			System.out.println("["+a[0] + "," + a[1] +"]") ;
		}
	}
}

javier_cj contestada 1 año antes

Muchas gracias!! Pero tengo otra duda, yo el problema lo plantee así para simplificarlo, pero lo que quiero conseguir es una pequeña modificación, es decir: En este caso  divido los arrays en un tamaño fijo, es decir, que el objetivo para ordenarlos sea el mismo, una menor diferencia con respecto a la media, pero por ejemplo con los siguientes datos, y esta vez lo quiero dividir en 4 arrays: (2 4 6 8 9 5 11) Primer array: (2 9) Suma 11 Segundo array: (4 8) Suma 12 Tercer array: (6 5) Suma 11 y Cuarto array: (11) suma 11     Es decir, que sea yo el que indique el número de arrays en el que lo quiera dividir y el se ajuste, se me ha ocurrido la siguiente forma: Llenar los arrays de todas las combinaciones posibles, y crear para cada posibilidad una variable: suma diferencia, en la cual se meta el valor de la distancia de cada suma a la media,  y mirar en que combinacion dicha variable sea minima,que será la mas ajustada. Muchas gracias por ayudar! Suerte y perdón por las molestias.  

snow Staff contestada 1 año antes

a bien ya te entendi, tu defines cuantos arrays quieres y debe agrupar los numeros de tal forma que la media de esos numeros sea la mas similar posible y ademas acomode los numeros para que salga ese numero de arrelgos: suponiendo tu ejemplo, si en dado caso yo quiera que sean solo dos arrays por ejemplo…. serian dos arrays… uno de 3 y otro de 4 elementos?

javier_cj contestada 1 año antes

Si a eso mismo me refiero, se me ha ocurrido hacerlo de esa manera, que te parece? lo único que si aumentamos el tamaño del array principal, los calculos y el número de posibilidades se disparan. Muchas gracias compañero.

Your Answer

5 + 9 =