Supposons qu'il existe des n
lignes pour une hotline.
Chaque fois qu'un client appelle la hotline, l'appel est renvoyé vers l'une des n
lignes. Et je veux attribuer un pourcentage d'appel à chacune des n lignes. Supposons qu'il y ait deux lignes et qu'une ligne soit affectée à 60% et l'autre à 40%, le nombre total d'appels est de 10, de sorte que la première ligne recevrait 6 appels et la seconde 4 appels.
Je connais le pourcentage d'appels vers chaque ligne à l'avance, mais le problème est que je ne connais pas le nombre d'appels qui seraient reçus en une journée.
Comment puis-je répartir le nombre d'appels sans connaître le nombre total d'appels?
design
algorithms
akku
la source
la source
Réponses:
Faites un peu de comptabilité sur les appels déjà pris et calculez leur répartition sur les n lignes. Cela vous donne n pourcentages (votre distribution déjà atteinte), qui peuvent être comparés aux n pourcentages que vous souhaitez atteindre. Chaque fois qu'un nouvel appel arrive, affectez cet appel à la ligne avec l'écart le plus élevé par rapport à la valeur cible (notez que tant que vous ne frappez pas exactement la distribution donnée, il y a toujours une ligne qui a jusqu'à présent trop peu d'appels, par rapport à la distribution cible).
Par exemple: après avoir attribué le premier appel à la ligne 1:
...
EDIT: Cette approche pourrait être encore améliorée en n'utilisant pas la différence absolue, mais en choisissant la ligne qui minimise la somme des carrés de tous les écarts. Cela vous donnerait également un meilleur résultat si vous atteignez exactement les valeurs cibles.
la source
la source
Je suis d'accord avec la solution de @ DocBrown. Le placer dans une forme d'algorithme:
Delta est déterminé par le pourcentage réel moins le pourcentage attendu d'une ligne. De cette façon, ceux qui ont le plus grand delta négatif sont ceux qui ont le plus besoin d'un appel pour se conformer au pourcentage attendu.
Par exemple, dans le cas où les pourcentages attendus pour les lignes 1 et 2 sont respectivement de 60% et 40%, et leurs pourcentages réels sont de 50% et 50%, vous verriez la ligne de commande 1 suivie de la ligne 2, car -10 % est inférieur à 10%. Par conséquent, la ligne 1 recevrait l'appel.
Je recommande fortement d'utiliser le tri par insertion car il fonctionne mieux lorsque le tableau est déjà principalement trié.
De plus, comme optimisation mineure, si vous gardez une trace du nombre total d'appels jusqu'à présent, plutôt que d'avoir à calculer le pourcentage réel de chaque ligne, vous pouvez simplement calculer le nombre total d'appels pour cette ligne moins le pourcentage attendu pour cette ligne. ligne multipliée par le nombre total d'appels (delta = t_i - p_i * T). Dans ce cas, le delta est simplement le nombre négatif d'appels pour atteindre le pourcentage attendu.
J'espère que cela clarifie tout autre doute.
la source
O(n)
est ce que vous pouvez vous attendre à trier une liste déjà triée avec le tri par insertion etO(n)
c'est ce que vous devez utiliser pour trouver la plus petite valeur. Je suppose simplement que je l'ai trié.Hypothèses énoncées dans le PO
Conception d'algorithmes
Définissez chaque ligne par son%
Trier chaque ligne par sa position à l'écart de 0 définie comme (% actuel de travailleurs -% de travailleurs affectés) ou par assignation aléatoire si toutes les lignes = 0
Transférer chaque appel vers la plus grande ligne à partir de 0
Exemple: 3 lignes avec un% de 20, 30 et 50 respectivement. Au point x dans le temps, 1 personne appelle et puisque chaque ligne est à 0 de 0, elle est assignée au hasard - disons à la ligne 2 qui devrait contenir 30% de tous les appels. Étant donné que la ligne 2 devrait contenir 30% de tous les appels et détient désormais 100% de tous les appels, sa position à partir de 0 augmente. L'appelant suivant serait maintenant affecté à la ligne 1 ou à la ligne 3, etc. jusqu'à l'équilibre (0) et donc la boucle se répète.
la source
Il s'agit d'une solution naïve qui ne suppose rien mais permettrait une distribution basée sur un pourcentage. Cette solution pourrait être améliorée de nombreuses façons, mais c'est l'essentiel. Je ne sais pas si c'est ce que vous cherchez, mais cela vous donnerait une vraie distribution.
code pseudo ...
la source