Digamos que tiene n gente, cada uno que se debe dinero el uno al otro. En general, debería ser posible reducir la cantidad de transacciones que deben llevarse a cabo. es decir, si X debe Y £ 4 y Y debe X £ 8, entonces Y solo tiene que pagar X £ 4 (1 transacción en lugar de 2).Quién debe quién optimización de dinero
Esto se vuelve más difícil cuando X le debe a Y, pero Y le debe a Z quién también debe X. Veo que puedes calcular fácilmente un ciclo en particular. Me sirve de ayuda cuando lo veo como un gráfico completamente conectado, con los bordes como la cantidad que cada persona debe.
Parece que el problema es NP-completo, pero ¿qué tipo de algoritmo de optimización podría hacer, sin embargo, para reducir el total de cantidad de transacciones? No tiene que ser tan eficiente, ya que N es bastante pequeño para mí.
Editar:
El propósito de este problema sería la de poder tener en el sistema contable algo que se puede decir a cada persona cuando se conectan "Se puede quitar cantidad M de transacciones simplemente pagar a alguien X cantidad y otra persona Y cantidad ". Por lo tanto, la solución bancaria (aunque es óptima si todos pagan al mismo tiempo) realmente no se puede usar aquí.
Parece Expensure han resuelto este problema. Vea su entrada de preguntas frecuentes [Circular Debt Resolution ™] (http://expensure.com/home/faq). – marcog
Si no hay costos de transacción, hay una solución simple que involucra a un banco. Si hay costos de transacción, es mucho más difícil. –
Podemos modificar el problema para eliminar el problema del banco. Agreguemos la restricción, "una persona puede estar involucrada en la mayoría de las transacciones (N-1)". Entonces ningún banco, ningún candidato. –