Ciao a tutti! Ho un problema (che non saprei nemmeno come chiamare) con la gestione di un array.
ho buttato giù un pezzo della possibile soluzione al mio problema, ma non so come proseguire e non so se questo è il modo migliore per farlo.
Ho un insieme di n array che contengono degli interi e una funzione (match) che mi controlla a due a due se i due array che le passo contengono almeno un elemento in comune (non mi interessa quale).
In pratica devo controllare tutte le possibili combinazioni di due di questi array e dividerli in gruppi in base a quelli che 'matchano' tra loro, ovvero se A e B hanno un elemento in comune, B e C idem, e D ed E anche devo ottenere i gruppi (A,B,C) e (D,E).
In pratica, questo è il codice (semplificato):
Codice PHP:
$indici=array(0,1,2,3,4,...)//array iniziale
for($i=0;$i<$t1;++$i){//t1=count($vettori_con_interi) l'array che contiene tutti gli altri
$handle1=$vettori_con_interi[$i];//seleziono un array
for($j=$i+1;$j<$t1;++$j){//scorro in diagonale per evitare di farlo 2 volte
$handle2=$vettori_con_interi[$j];//e prendo il secondo
if(match($handle1,$handle2)>0){//se matchano
$u=count($res[$i]);
for($k=0;$k<$u;++$i{
$indici[$indici[$k]]=array_merge($indici[$k],array($j));
}//PROBLEMA
}}}
$indici è di lunghezza n (n corrisponde al numero di elementi che devo trattare) e ogni elemento è uguale alla propria chiave
quello che cerco di fare dove ho scritto PROBLEMA è di unire i vari pezzi in modo che alla fine in $indici ci sia (tornando all'esempio iniziale):
A->(A,B,C),B->(A,B,C),C->(A,B,C),D->(D,E),E->(D,E)
(in php al posto delle lettere ci sono i numeri),
e poi l'idea era di prendere i pezzi diversi, ovvero (A,B,C) e (D,E).
sicuramente il mio codice non funziona, non so come muovermi, ci son sopra da due giorni ma neanche in pseudocodice sono riuscito a trovare una soluzione ottimale, è un problema che non avevo mai affrontato. Inoltre ho come la sensazione che ci sia un modo migliore per fare quello che voglio.