Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    Help Calendario Campionato con Algoritmo di Berger

    Volevo creare uno script che mi calcoli le giornate per costruire un calendario partite di un campionato.
    Trovo dovunque che l'Algoritmo di Berger fa al caso mio.
    Lo provo, ad esempio, su 8 squadre (quindi ogni squadra giocherà 3 partite in casa e 4 fuori o viceversa) MA una mi gioca troppe partite in casa...
    L'algoritmo (una funzione) l'ho presa da wikipedia e come array di squadre in ingresso ho dato:
    $arrSquadre = array('111','222','333','444','555','666','777','8 88');

    Come risultato ho ottenuto questo (Controllate la squadra 555):

    1a Giornata
    888 - 111
    777 - 222
    666 - 333
    555 - 444

    2a Giornata
    111 - 222
    333 - 888
    444 - 777
    555 - 666

    3a Giornata
    333 - 111
    222 - 444
    888 - 555
    777 - 666

    4a Giornata
    111 - 444
    555 - 333
    666 - 222
    777 - 888

    5a Giornata
    555 - 111
    444 - 666
    333 - 777
    222 - 888

    6a Giornata
    111 - 666
    777 - 555
    888 - 444
    222 - 333

    7a Giornata
    777 - 111
    666 - 888
    555 - 222
    444 - 333
    Fantasupermegafavolipermeramagicultra irresistibili
    4 10 30 100 1001 personaggi insuperabili fantaincredibili ultraimpossibili iperterribili irresistibili!!!

    "... a quell'età ... bastava un dito per fare la pace ..."
    fotine

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    E quindi la domanda è?

  3. #3
    che aiuto vuoi? dato per scontato che quello script su wikipedia sia ben fatto, diamo per buono il risultato. Se il risultato non va bene le cose sono quattro:

    - hai sbagliato qualcosa te
    - è sbagliata l'implementazione dell'algoritmo ( ad esempio prova a vedere se la versione javascript da lo stesso risultato)
    - è sbagliato l'algoritmo (dubito)
    - quello è il risultato corretto

    vedi un pò te
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Tra l'altro l'ho provato, genera sempre lo stesso tabellone e anche la squadra 777 gioca 5 partite in casa e 2 fuori come la 555.

  5. #5
    Ma a cosa ti serve? se ti serve una cosa una-tantum ti conviene prendere un calendario già fatto da qualche competizione sportiva e associare le tue squadre a quelle di quel calendario.. io di solito faccio cosi.
    ad esempio, se ti servono 8 squadre, c'è il campionato di baseball che parte oggi che ne ha proprio 8, puoi usare quello.
    Pensate i programmi a librerie, e innalzate il livello d'astrazione

  6. #6
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Tra l'altro l'ho provato, genera sempre lo stesso tabellone e anche la squadra 777 gioca 5 partite in casa e 2 fuori come la 555.
    La domanda quindi era: è normale un comportamento simile?

    Quale squadra vorrebbe giocare 5 partite fuori casa e 2 in casa??
    Su 7 partite posso capire la suddivisione in 3 fuori e 4 in casa (o viceversa) ma 5-2 mi pare un rapporto non accettabile...

    Conoscete qualche altro script migliore di questo?
    Fantasupermegafavolipermeramagicultra irresistibili
    4 10 30 100 1001 personaggi insuperabili fantaincredibili ultraimpossibili iperterribili irresistibili!!!

    "... a quell'età ... bastava un dito per fare la pace ..."
    fotine

  7. #7
    Quote Originariamente inviata da Santino83_02 Visualizza il messaggio
    che aiuto vuoi?
    Beh... io fatto copia/incolla e ho solo inviato 8 squadre alla funzione... Quindi è regolare che QUEL codice dia quel risultato...

    Quindi forse ci vuole un altro script, forse questo algoritmo non si adatta bene ad un campionato... Non so che dire...

    Conosci qualche altro script che faccia tale cosa?
    Fantasupermegafavolipermeramagicultra irresistibili
    4 10 30 100 1001 personaggi insuperabili fantaincredibili ultraimpossibili iperterribili irresistibili!!!

    "... a quell'età ... bastava un dito per fare la pace ..."
    fotine

  8. #8
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Se su 7 partite se ne devono avere 4 in casa e 3 fuori o viceversa, l'implementazione dell'algoritmo è chiaramente sbagliata, anche la versione JS ha lo stesso problema, quella Java non l'ho provata, ma suppongo dia lo stesso risultato.

    Alternative già pronte non ne conosco, se non se ne trovano puoi sempre crearti uno script tuo, non starti a preoccupare di ottimizzazione, tanto il numero di squadre non sarà mai tanto alto da farti notare differenze di prestazione tra un algoritmo scritto coi piedi (purché funzionante) e uno iper-ottimizzato.

  9. #9
    Hai qualche idea? ...io già ho difficoltà a capire fino in fondo le ultime manovre sugli dello script dell'algoritmo di berger.
    Riguardo ai tornei non credo che mai si superi le 32 squadre (la media è 12 squadre, ma per eventi cittadini particolari ho raggiunto anche le 24 squadre)
    Fantasupermegafavolipermeramagicultra irresistibili
    4 10 30 100 1001 personaggi insuperabili fantaincredibili ultraimpossibili iperterribili irresistibili!!!

    "... a quell'età ... bastava un dito per fare la pace ..."
    fotine

  10. #10
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    il problema risiede nella parte finale della funzione
    Codice PHP:
            // Ruota in gli elementi delle liste, tenendo fisso il primo elemento
            // Salva l'elemento fisso
            
    $pivot $casa[0];
             
    /* sposta in avanti gli elementi di "trasferta" inserendo
                all'inizio l'elemento casa[1] e salva l'elemento uscente in "riporto" */ 
           
    array_unshift($trasferta$casa[1]);        $riporto array_pop($trasferta);
             
    /* sposta a sinistra gli elementi di "casa" inserendo all'ultimo            posto l'elemento "riporto" */
           
    array_shift($casa);
            
    array_push($casa$riporto);
             
    // ripristina l'elemento fisso
            
    $casa[0] = $pivot
    bisogna trovare il modo per evitare che queste operazioni sugli array portino l'ultima squadra a fare più trasferte di altre (potete verificarlo facendo un sort su trasferte, quella con più trasferte diventa 888)

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.