Załóżmy, że istnieją n
linie dla infolinii.
Za każdym razem, gdy klient dzwoni na infolinię, połączenie jest przekierowywane na jedną z n
linii. I chcę przypisać procent połączeń do każdej z n linii. Załóżmy, że są dwie linie, a jedna linia ma przypisane 60%, a druga 40%, całkowita liczba połączeń wynosi 10, więc pierwsza linia otrzyma 6 połączeń, a druga otrzyma 4 połączenia.
Znam z góry procent dzwonienia na każdą linię, ale problem polega na tym, że nie znam liczby połączeń, które zostałyby odebrane w ciągu jednego dnia.
Jak mogę rozdzielić liczbę połączeń bez znajomości łącznej liczby połączeń?
design
algorithms
akku
źródło
źródło
Odpowiedzi:
Wykonaj kilka ksiąg rachunkowych dotyczących już odebranych połączeń i oblicz ich rozkład w linii n To daje ci n wartości procentowych (już osiągnięty rozkład), które można porównać z n procentami, które chcesz osiągnąć. Za każdym razem, gdy przychodzi nowe połączenie, przypisz je do linii o największym odchyleniu od wartości docelowej (zwróć uwagę, że dopóki nie trafisz dokładnie w dany rozkład, zawsze istnieje linia, która ma za mało połączeń, w porównaniu z rozkładem docelowym).
Na przykład: po przypisaniu pierwszego połączenia do linii 1:
...
EDYCJA: To podejście można jeszcze ulepszyć, nie stosując bezwzględnej różnicy, ale wybierając linię, która minimalizuje sumę kwadratów wszystkich odchyleń. Dałoby to również lepszy wynik, jeśli dokładnie osiągniesz wartości docelowe.
źródło
źródło
Zgadzam się z rozwiązaniem @ DocBrown. Umieszczenie go w formie algorytmu:
Delta jest określana przez rzeczywisty procent minus oczekiwany procent linii. W ten sposób te z największą deltą ujemną to te, które najbardziej wymagają wywołania w celu dostosowania do oczekiwanego procentu.
Na przykład w przypadku, gdy oczekiwane wartości procentowe dla linii 1 i 2 wynoszą odpowiednio 60% i 40%, a ich rzeczywiste wartości procentowe wynoszą 50% i 50%, zobaczysz wiersz zamówienia 1, a następnie wiersz 2, ponieważ -10 % jest mniejsze niż 10%. Dlatego linia 1 odbierze połączenie.
Zdecydowanie polecam użycie sortowania wstawianego, ponieważ działa najlepiej, gdy tablica jest już w większości posortowana.
Ponadto, jako drobna optymalizacja, jeśli śledzisz dotychczasową całkowitą liczbę połączeń, zamiast obliczać rzeczywisty procent każdej linii, możesz po prostu obliczyć całkowitą liczbę połączeń dla tej linii minus oczekiwany procent dla tej linii razy linii łączna liczba połączeń (delta = t_i - p_i * T). W tym przypadku delta to po prostu ujemna liczba połączeń, aby osiągnąć oczekiwany procent.
Mam nadzieję, że to wyjaśni inne wątpliwości.
źródło
O(n)
jest tym, czego możesz oczekiwać, sortując już posortowaną listę z sortowaniem wstawiania iO(n)
jest to, czego będziesz musiał użyć, aby znaleźć najmniejszą wartość. Po prostu zakładam, że to posortowałem.Założenia, jak stwierdził PO
Projektowanie algorytmów
Zdefiniuj każdą linię według jej%
Posortuj każdą linię według pozycji od 0 zdefiniowanej jako (bieżący% pracowników - przydzielono% pracowników) lub losowo, jeśli wszystkie linie = 0
Przekaż każde połączenie na największą linię poza 0
Przykład: 3 linie z% odpowiednio 20, 30 i 50. W punkcie x w czasie 1 osoba dzwoni, a ponieważ każda linia jest 0 od 0, przydzielana jest losowo - powiedzmy na linii 2, która powinna obsłużyć 30% wszystkich połączeń. Ponieważ linia 2 powinna obsługiwać 30% wszystkich połączeń, a teraz obsługuje 100% wszystkich połączeń, jego pozycja od 0 wzrasta. Następny dzwoniący zostanie teraz przypisany do linii 1 lub linii 3 itd., Aż do osiągnięcia równowagi (0), a zatem pętla się powtarza.
źródło
Jest to naiwne rozwiązanie i zakłada jedynie, że pozwoliłoby na rozkład procentowy. To rozwiązanie można ulepszyć na wiele sposobów, ale to jest sedno. Nie jestem pewien, czy tego właśnie szukasz, ale zapewniłoby to prawdziwą dystrybucję.
kod psuedo ...
źródło