Angenommen, es gibt n
Leitungen für eine Hotline.
Wenn ein Kunde die Hotline anruft, wird der Anruf an eine der n
Leitungen weitergeleitet. Und ich möchte jeder der n Leitungen einen Prozentsatz der Anrufe zuweisen. Angenommen, es gibt zwei Leitungen und eine Leitung ist mit 60% und die andere mit 40% belegt. Die Gesamtzahl der Anrufe beträgt 10, sodass die erste Leitung 6 Anrufe empfängt und die zweite 4 Anrufe erhält.
Ich kenne den Prozentsatz der Anrufe zu jeder Leitung im Voraus, aber das Problem ist, dass ich nicht weiß, wie viele Anrufe an einem Tag eingehen würden.
Wie kann ich die Anzahl der Anrufe verteilen, ohne die Gesamtanzahl der Anrufe zu kennen?
design
algorithms
akku
quelle
quelle
Antworten:
Führen Sie eine Buchhaltung über die bereits angenommenen Anrufe durch und berechnen Sie deren Verteilung auf die n Leitungen. Dies gibt Ihnen n Prozentwerte (Ihre bereits erreichte Verteilung), die mit den n Prozentwerten verglichen werden können, die Sie erreichen möchten. Wenn ein neuer Anruf eingeht, weisen Sie diesen Anruf der Leitung mit der größten Abweichung vom Zielwert zu (beachten Sie, dass es immer eine Leitung gibt, die zu wenige Anrufe hat, solange Sie die angegebene Verteilung nicht genau treffen.). im Vergleich zur Zielverteilung).
Zum Beispiel: Nach dem Zuweisen des ersten Anrufs zu Leitung 1:
...
BEARBEITEN: Dieser Ansatz könnte weiter verbessert werden, indem nicht die absolute Differenz verwendet wird, sondern die Linie gewählt wird, die die Quadratsumme aller Abweichungen minimiert. Das würde auch zu einem besseren Ergebnis führen, wenn Sie die Zielwerte genau erreichen.
quelle
quelle
Ich stimme der Lösung von @ DocBrown zu. Platzieren Sie es in einem Algorithmus-Formular:
Delta wird durch den tatsächlichen Prozentsatz minus dem erwarteten Prozentsatz einer Linie bestimmt. Auf diese Weise sind diejenigen mit dem größten negativen Delta diejenigen, bei denen ein Anruf am meisten erforderlich ist, um den erwarteten Prozentsatz einzuhalten.
Beispiel: In dem Fall, in dem die erwarteten Prozentsätze für die Zeilen 1 und 2 60% bzw. 40% betragen und die tatsächlichen Prozentsätze 50% und 50% betragen, wird in der Reihenfolge Zeile 1 gefolgt von Zeile 2 angezeigt, seit -10 % ist weniger als 10%. Daher würde Leitung 1 den Anruf erhalten.
Ich empfehle dringend, die Einfügesortierung zu verwenden, da sie am besten funktioniert, wenn das Array bereits größtenteils sortiert ist.
Als geringfügige Optimierung können Sie auch einfach die Gesamtzahl der Anrufe abzüglich des erwarteten Prozentsatzes für jede Leitung berechnen, wenn Sie die Gesamtzahl der bisherigen Anrufe verfolgen, anstatt den tatsächlichen Prozentsatz für jede Leitung berechnen zu müssen line mal die Gesamtzahl der Anrufe (Delta = t_i - p_i * T). In diesem Fall ist das Delta einfach die negative Anzahl von Anrufen, um den erwarteten Prozentsatz zu erreichen.
Ich hoffe, das klärt alle anderen Zweifel.
quelle
O(n)
ist das, was Sie erwarten können, wenn Sie eine bereits sortierte Liste mit Einfügesortierung sortieren, undO(n)
das, was Sie verwenden müssen, um den kleinsten Wert zu finden. Ich gehe einfach davon aus, dass es sortiert ist.Annahmen wie OP angegeben
Algorithmus-Design
Definiere jede Zeile durch%
Sortieren Sie jede Zeile nach ihrer von 0 entfernten Position, definiert als (aktueller Prozentsatz der Beschäftigten - zugeordneter Prozentsatz der Beschäftigten) oder nach zufälliger Zuordnung, wenn alle Zeilen = 0 sind
Leiten Sie jeden Anruf an die größte Leitung weiter, die von 0 entfernt ist
Beispiel: 3 Zeilen mit einem Prozentsatz von 20, 30 bzw. 50. Zum Zeitpunkt x ruft 1 Person an und da jede Leitung 0 von 0 entfernt ist, wird sie zufällig zugewiesen - sagen wir zu Leitung 2, die 30% aller Anrufe halten sollte. Da Leitung 2 30% aller Anrufe halten sollte und jetzt 100% aller Anrufe hält, erhöht sich ihre Position von 0. Der nächste Anrufer würde nun entweder Leitung 1 oder Leitung 3 usw. bis zum Gleichgewicht (0) zugewiesen und die Schleife wiederholt sich.
quelle
Dies ist eine naive Lösung und setzt nichts voraus, würde aber eine prozentuale Verteilung ermöglichen. Diese Lösung könnte in vielerlei Hinsicht verbessert werden, aber das ist der Kern der Sache. Ich bin mir nicht sicher, ob dies das ist, wonach Sie suchen, aber es würde Ihnen wahre Verbreitung geben.
Pseudocode ...
quelle