Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 30
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    23

    Script PHP con scelta valore MAX

    Salve ragazzi! Vi espongo il mio problema. Anticipo subito che è un po' complesso, per cui ringrazio davvero infinitamente chiunque mi aiuti a risolvere il mio problema!

    Avrei bisogno di creare uno script che faccia sostanzialmente questo: estrarre i 5 valori max relativamente a 5 array che sono però "misti", ovvero in cui sono presenti dei valori "ricorrenti". Es:

    array1(a, b)
    array2(a, c, d, e, g)
    array3(b, d, g, h)
    array4(e, t, z)
    array5(b, c, d, k)

    Le 2 "regole" essenziali sono che
    1) la somma dei 5 array deve essere la più alta possibile...
    2) ...ma senza ripetere alcun valore utilizzato precedentemente (es. se nell'array1 il valore massimo era b, questo non può essere riutilizzato come valore max per gli array 3 e 5).


    Grazie a chiunque mi possa aiutare!!!

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Ti serve per un compito di scuola?
    Perché per utilizzo reale mi pare che non abbia senso.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    23
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Ti serve per un compito di scuola?
    Perché per utilizzo reale mi pare che non abbia senso.
    Ciao e innanzitutto grazie per la risposta!
    Non è un compito per scuola! Per fortuna (o purtroppo) l'ho finita da un po'...

    In sostanza ogni array è composto da una certa serie di esami. Ho bisogno di scegliere il valore massimo in ogni "gruppo d'esami", in modo tale che la "somma dei gruppi" sia massima... ma posso usare ogni esame una volta soltanto (cioè se lo uso nell'array1, non posso riusarlo nell'array2).

    max() sembrerebbe fare al caso mio, ma avrei bisogno di escludere ogni valore utilizzato dall'array successivo... e il problema è che comunque dovrei sincerarmi che la somma totale degli array sia la massima possibile. Il rompicapo (per me) è lì

    Posso chiederti perchè secondo te non avrebbe senso?

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Ti baste cercare il massimo dell'array1, una volta trovato passi ad array2 da cui prima elimini l'eventuale entry trovata in array1, trovato il massimo in array2 passi ad array3 da cui prima togli i valori trovati per array1 e array2 (se ci sono) e così via.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    23
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Ti baste cercare il massimo dell'array1, una volta trovato passi ad array2 da cui prima elimini l'eventuale entry trovata in array1, trovato il massimo in array2 passi ad array3 da cui prima togli i valori trovati per array1 e array2 (se ci sono) e così via.
    Esatto, è quello che avevo pensato anche io! Ma purtroppo non restituisce "sicuramente" la somma massima fra gli array. Se posso, proporrei un esempio pratico.

    a=30
    b=29
    c=23
    d=21
    e=20

    array1(a, b)
    array2(a, c, d, e).

    La funzione prenderebbe "a" come valore max per l'array1, e lo escluderebbe dall'array2, dove prenderebbe "c". La somma dei due array mi darebbe a+c, cioè, 53. Ma in realtà la somma massima possibile fra i due array è b+a, cioè 59! è qui il problema

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    L'alternativa che mi viene al volo è calcolare tutti i massimi possibili, poi scegliere la combinazione che ti da il massimo dei massimi.
    Seguendo il tuo esempio, prima calcoli prima il massimo di array1 e poi quello di array2, hai il risultato che hai proposto, ovvero 53.
    Poi azzeri tutto e cerchi prima il massimo in array2 e poi quello in array1, così trovi 59 e scegli questa combinazione.

    E' un po' macchinosa, ma in due minuti è la prima che mi viene.

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    23
    Perciò un qualcosa tipo:
    Codice PHP:
    $gruppo1 = array(ab);
    $gruppo2 = array(abcd);

    $max1a max(gruppo1);
    $max2a max(gruppo2) unset($max1a);

    $somma1 $max1a $max2a;

    $max2b max(gruppo2);
    $max1b max(gruppo1) unset($max2b);

    $somma2 $max1b $max2b;

    if(
    $somma1 $somma2) {echo $somma1}
    else {echo 
    $somma2
    Dovrebbe funzionare?
    Grazie mille dell'aiuto e altri suggerimenti/metodi sono bene accetti, ovviamente!

  8. #8
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Sì, una cosa così.

    Se hai due soli array puoi usare tranquillamente questo sistema, ma tieni presente che le combinazioni (permutazioni) possibili sono n! (con n = numero di array) quindi già con 4 array arrivi a 24 sequenze da provare.

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    23
    Eh, infatti. Il problema è che ho 5 array da mettere insieme e confrontare. Un delirio.
    Rimango in attesa di qualcosa di meglio (senza offesa, anzi, ancora grazie mille per l'aiuto...!!!), sennò dovrò gioco-forza arrangiarmi con questo!

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Non so se è un pò troppo complesso comunque...
    Codice PHP:
    $array = [[1,2,3],[2,2],[4,5,2,3],[1,4,2],[3,6,5]]; //20 max unico

    function SommaUnicaMassima(array $array, array &$somma){
        foreach(
    $array as $arr){
            
    $max max($arr);
            if(!
    in_array($max,$somma))
                
    $somma[] = $max;
            else
                
    SommaUnicaMassima([array_diff($arr,[$max])],$somma);
        }
    }

    $somma = [];
    SommaUnicaMassima($array$somma);
    echo 
    array_sum($somma); 

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.