Balancing-Algorithmus, um Unterschiede auszugleichen?

8

Sagen wir, wir haben N Anzahl von Konten mit positiven Salden B_1, ..., B_n .

Wir können eine Überweisung T(from,to,amount) vornehmen, die einen bestimmten Kontostand verschiebt.

Wir haben Kenntnis über eine optimale Verteilung der Salden O_1, ..., O_n .

Die Frage ist: Wie können wir die minimale Menge an Übertragungen finden, die die optimale Verteilung erreichen? Können wir höchstens mit N-1 Transfers davonkommen?

Beispiel:

%Vor%     
randomguy 07.09.2014, 19:24
quelle

1 Antwort

5

Ja, Sie können immer mit nicht mehr als N-1 Transfer davonkommen. Hier ist ein Beweis durch Induktion:

  1. Für N=2 ist es offensichtlich, dass nicht mehr als eine einzige Übertragung erforderlich ist.
  2. Für N>2 gibt es zwei Fälle:
    1. Wir sind schon bei der optimalen Verteilung, in diesem Fall gibt es nichts zu tun.
    2. Es gibt i und j so dass B_i > O_i und B_j < O_j . Übertragen Sie min(B_i - O_i, O_j - B_j) von Konto i auf Konto j . Dadurch wird eines der beiden Konten ausgeglichen, wodurch das Problem auf den Fall N-1 reduziert wird.

Der Beweis ist konstruktiv und gibt Ihnen einen Algorithmus. Der Algorithmus versucht nicht, die Anzahl der Übertragungen zu minimieren.

Es ist einfach, Heuristiken zur Verringerung der Anzahl der Schritte zu erstellen. Es ist ein bisschen spät am Tag, dass ich über Optimalität nachdenke, aber es würde mich nicht überraschen, wenn sich das Problem als NP-schwer herausstellen würde.

    
NPE 07.09.2014 19:47
quelle

Tags und Links