ciao ,vi spiego in poche parole quello che vorrei fare:
in input ho:
data una matrice triangolare:
** j1 j2 j3 j4
j1:-1
j2: 2 -1
j3: 3 2 -1
j4: 4 2 3 -1
un array di 4 stringhe(lavori):
j1:abcd
j2:bca
j3:cabc
j4:abcd
e una matrice di interi: (in cui ogni valore è associato ai caratteri delle rispettive stringhe)
** j1 j2 j3 j4
j1:10 10 10 1
j2: 5 5 4 0
j3: 1 20 20 20
j4: 1 10 1 10
per ogni colonna della matrice triangolare: trovo il max valore ad esempio nel mio caso (4)che corrisponde agli indici [j1][j4],inserisco quindi j1 e j4 dell'array di stringhe in un array I1 e le stringhe j2 e j3 in un array I2.
dopo questo passo devo verificare se il peso delle stringhe di I1>del peso delle stringhe di I2,quindi dalla matrice di interi prendo (j1 e j4)=I1(peso) e faccio la somma dei valori,la stessa cosa con (j2 e j4)=I2 ,se I1(peso)>I2(peso) mi fermo e restituisco l'array di stringhe I1.
se invece I1<=I2,ripeto le operazioni non considerando la righa in corrispondenza del max precedente etrovando un nuovo massimo,nel mio caso (3)
corrisponde agli indici [j1][j3],inserisco quindi j3 dell'array di stringhe nell' array I1 quindi I1=(j1,j3,j4) e tolgo la stringa j3 dall'array I2,quindi I2=(j2)
dopo questo passo devo verificare se il peso delle stringhe di I1>del peso delle stringhe di I2,quindi dalla matrice di interi prendo (j1 e j4e j3)=I1(peso) e faccio la somma dei valori,la stessa cosa con I2 che adesso vale=(j2) ,se I1(peso)>I2(peso) mi fermo e restituisco l'array di stringhe I1.altrimenti proseguo...
Sto provando da un pò a vedere come implementare questo algoritmo ma con non poche difficoltà,questo il codice che ho scritto:ma eseguendolo mi stampa questo:
-1
2 -1
3 2 -1
4 2 3 -1
null
null
null
null
ma invece io voglio che mi ritorni un array di stringhe!!qualcuno mi sa dire dove sbaglio??perchè??grazie
codice:package lcs; public class Massimo { public static String [] InsiemeMaggiore(int [][] matrice,String [] job,int [][]tempoProc){ int righa,colonna; int i,j; String[]I1 =new String[job.length]; String[]I2 =new String[job.length]; int max = -1; int [] indiceRigha = new int[matrice.length]; indiceRigha[0]=-1;//array non nullo /*scandisco le colonne e per ogni colonna * scandisco le righe e trovo il massimo della colonna j*/ for(j=0; j<matrice[0].length;j++){ int sommaI1=0; int sommaI2=-1; if(sommaI2>=sommaI1){ for(i=j+1; i<matrice.length;i++){ for(i=0;i<indiceRigha.length;i++){ if((matrice[i][j]>max)&&(indiceRigha[i]!=i)){ max=matrice[i][j]; } colonna=j; righa=i; indiceRigha[i]+=righa; /*inserisco le rispettive stringhe in * corrispondenza del max trovato negli * arrayI1 e I2*/ for(i=0;i<job.length;i++){ if((i==righa)||(i==colonna)){ I1[i]+=job[i]; } else{ I2[i]+=job[i]; } int indexRimuovi=righa; I2[indexRimuovi]=I2[I2.length-1]; I2 = ArrayRidimensionato.resize(I2, I2.length-1); } /*calcolo il tempo di processamento dei pesi associati * alle stringhe che si trovano in I1 e I2 */ for(i=0;i<tempoProc.length;i++){ for(j=0;j<tempoProc[i].length;j++){ if((i==righa)||(i==colonna)){ sommaI1+=tempoProc[i][j]; System.out.println(sommaI1); } else{ sommaI2+=tempoProc[i][j]; System.out.println(sommaI2); } sommaI2 -=tempoProc[i][j]; } }System.out.println(sommaI1); } } } } return I1; } }codice:package lcs; /*ridimensiona l'array eliminando la righa*/ public class ArrayRidimensionato { public static String[] resize(String[] oldArray,int newLength){ if (newLength < 0) throw new IllegalArgumentException(); String[] newArray = new String[newLength]; int count = oldArray.length; if (newLength < count) count = newLength; for (int i = 0; i < count; i++) newArray[i] = oldArray[i]; return newArray; } }codice:package lcs; public class provaLcs { public static void main(String[] args) { String a ="abcd"; String b ="bca"; String c ="cabc"; String d ="abcd"; String[] job= new String []{a,b,c,d}; int[][] m =new int[job.length][job.length]; m=Matrice.mLunghezzaSottostringa(job); int[][] matrice =new int[][]{{10,10,10,1},{5,5,4,0},{1,20,20,20},{1,10,1,10}}; String[]insieme=new String[matrice.length]; insieme=Massimo.InsiemeMaggiore(m,job,matrice); for(int i=0;i<insieme.length;i++){ System.out.println(insieme[i]+""); } } }![]()

:
Rispondi quotando
cmq grazie dei consigli, ciao
