Stai ospitando un campionato di basket 1 v 1 con un programma di gioco. Alla fine del campionato, ogni giocatore deve riportare il suo presunto record di sconfitte (non ci sono legami), ma si desidera verificare se le classifiche proposte fossero effettivamente possibili dato il programma.
Ad esempio: hai quattro giocatori (Alice + Bob + Carol + Dave) e il tuo programma è un semplice round robin. Le classifiche riportate [ A: 3-0 B: 1-2 C: 1-2 D: 1-2] e [ A: 2-1 B: 1-2 C: 1-2 D: 2-1] sarebbero possibile, ma la posizione [ A: 3-0 B: 0-3 C: 0-3 D: 3-0] non sarebbe.
Supponiamo ora che il programma sia invece un gioco testa a testa tra Alice + Bob e Carol + Dave. La posizione dichiarata [ A: 3-0 B: 0-3 C: 0-3 D: 3-0] è ora possibile, ma [ A: 3-0 B: 1-2 C: 1-2 D: 1- 2] non sarebbe più.
(Il programma non deve essere simmetrico in alcun modo. Puoi far giocare Alice solo contro Bob 10 volte, quindi fai in modo che Bob + Carol + Dave giochino 58 round robin uno contro l'altro.)
Problema : dato un programma con k partecipanti e n partite totali, controlla in modo efficace se una classifica di sconfitte proposta potrebbe effettivamente verificarsi da quel programma.
Il metodo O ( ) della forza bruta è ovvio, enumera tutti i possibili risultati del gioco e vedi se ce n'è uno corrispondente alla classifica proposta. E se k è piccolo aumentando n non aggiunge molta complessità: è molto facile controllare la classifica di una lega per due persone indipendentemente dal fatto che giochino dieci partite o dieci miliardi di partite. Oltre a ciò, non ho fatto molti progressi nel trovare un metodo migliore ed ero curioso di sapere se qualcuno avesse mai visto un problema simile in precedenza.