Il modo migliore per cancellare gli equilibri tra pagatori e beneficiari

-1

Dì che circa 20 persone vanno in un negozio e tutti comprano qualcosa. Quando si tratta di pagare, 5 di loro pagano l'intero importo di 10.000 $ suddivisi in modo diseguale tra loro.

Dal momento che tutti hanno acquistato cose diverse, tutti devono importi diversi ai pagatori. Ora ci sono molti modi in cui i pagatori possono cancellare i saldi con i beneficiari precisamente 20 alla potenza 20.

La mia domanda è su quali basi tecniche dovrebbero contattare i pagatori e i beneficiari per ottenere l'autorizzazione? Tutte le soluzioni non possono essere ugualmente buone o sono?

Uno dei metodi di compensazione sarebbe quello di trovare pagatori e beneficiari con lo stesso importo in modo che possano annullare l'un l'altro riducendo così il numero totale di trasferimenti.

UPDATE:

  1. Le persone possono trasferire importi arbitrari a chiunque.
  2. Ridurre al minimo il numero totale di trasferimenti è l'obiettivo principale.
  3. Un beneficiario non può pagare un importo superiore a quello che deve e diventa un pagatore secondario.
  4. L'output dovrebbe essere un elenco di trasferimenti suggeriti. Un trasferimento suggerito sarebbe simile a questo {FromUser: a, ToUser: b, ClearanceAmount: 100}
  5. I pagatori non sanno chi detiene il loro debito.
  6. Il debito dei beneficiari può essere suddiviso tra più persone.
  7. I beneficiari sanno quanto ciascun pagatore ha pagato dall'importo totale.
posta Tushar Mathur 28.03.2013 - 18:43
fonte

1 risposta

2

Questa è una generalizzazione del problema somma sottoinsieme .

Nel caso semplice, dove ci sono due pagatori, è identico al problema della somma dei sottoinsiemi. O c'è un sottoinsieme di debiti esattamente uguale all'importo pagato da un pagatore, o un pagamento deve essere diviso tra i due pagatori.

Il problema somma sottoinsieme è NP completato, quindi non esiste una soluzione "rapida".

    
risposta data 28.03.2013 - 20:20
fonte

Leggi altre domande sui tag