Misalkan ada n
garis untuk hotline.
Setiap kali pelanggan menelepon hotline, panggilan diteruskan ke salah satu n
jalur. Dan saya ingin menetapkan persentase panggilan ke masing-masing n baris. Misalkan ada dua saluran dan satu saluran ditugaskan 60% dan lainnya adalah 40%, jumlah total panggilan adalah 10 sehingga saluran pertama akan menerima 6 panggilan dan yang kedua akan mendapatkan 4 panggilan.
Saya tahu persentase panggilan ke setiap saluran di muka tetapi masalahnya adalah saya tidak tahu jumlah panggilan yang akan diterima dalam sehari.
Bagaimana saya bisa mendistribusikan jumlah panggilan tanpa mengetahui total panggilan?
design
algorithms
akku
sumber
sumber
Jawaban:
Lakukan beberapa pembukuan tentang panggilan yang sudah diambil dan hitung distribusinya melalui n baris. Ini memberi Anda n nilai persentase (distribusi yang sudah Anda capai), yang dapat dibandingkan dengan n persentase yang ingin Anda capai. Setiap kali ada panggilan baru, tetapkan panggilan itu ke saluran dengan penyimpangan tertinggi dari nilai target (perhatikan bahwa selama Anda tidak menekan distribusi yang diberikan dengan tepat, selalu ada garis yang memiliki terlalu sedikit panggilan sejauh ini, bila dibandingkan dengan target distribusi).
Misalnya: setelah menetapkan panggilan pertama ke saluran 1:
...
EDIT: Pendekatan ini dapat lebih ditingkatkan dengan tidak menggunakan perbedaan absolut, tetapi memilih garis yang meminimalkan jumlah kuadrat dari semua penyimpangan. Itu juga akan memberi Anda hasil yang lebih baik jika Anda mencapai nilai target dengan tepat.
sumber
sumber
Saya setuju dengan solusi @ DocBrown. Menempatkannya dalam bentuk algoritma:
Delta ditentukan oleh persentase aktual dikurangi persentase yang diharapkan dari suatu garis. Dengan cara ini, mereka yang memiliki delta negatif terbesar adalah mereka yang paling membutuhkan panggilan untuk menyesuaikan dengan persentase yang diharapkan.
Misalnya, dalam kasus di mana persentase yang diharapkan untuk jalur 1 dan 2 masing-masing adalah 60% dan 40%, dan persentase aktualnya adalah 50% dan 50%, Anda akan melihat garis pemesanan 1 diikuti oleh baris 2, karena -10 % kurang dari 10%. Karenanya saluran 1 akan menerima telepon.
Saya sangat merekomendasikan menggunakan jenis penyisipan karena berkinerja terbaik ketika sebagian besar array sudah diurutkan.
Juga, sebagai optimasi kecil, jika Anda melacak jumlah total panggilan sejauh ini, daripada harus menghitung persentase aktual dari setiap baris, Anda dapat menghitung jumlah total panggilan untuk saluran itu dikurangi persentase yang diharapkan untuk itu baris kali jumlah total panggilan (delta = t_i - p_i * T). Dalam kasus ini, delta hanyalah jumlah panggilan negatif untuk mencapai persentase yang diharapkan.
Saya harap itu menjelaskan keraguan lainnya.
sumber
O(n)
adalah apa yang dapat Anda harapkan menyortir daftar yang sudah diurutkan dengan jenis penyisipan danO(n)
apa yang harus Anda gunakan untuk menemukan nilai terkecil. Saya hanya berasumsi telah diurutkan.Asumsi seperti yang dinyatakan OP
Desain Algoritma
Tentukan setiap baris dengan% nya
Urutkan setiap baris dengan posisinya menjauh dari 0 yang didefinisikan sebagai (% saat ini dari pekerja - yang ditugaskan% dari pekerja) atau dengan penetapan acak jika semua baris = 0
Teruskan setiap panggilan ke saluran terbesar dari 0
Contoh: 3 baris dengan% masing-masing 20, 30 dan 50. Pada titik x dalam waktu 1 orang memanggil dan karena setiap saluran 0 dari 0, maka akan ditugaskan secara acak - katakanlah ke saluran 2 yang harus menampung 30% dari semua panggilan. Karena saluran 2 harus menahan 30% dari semua panggilan dan sekarang memegang 100% dari semua panggilan, posisinya dari 0 meningkat. Penelepon berikutnya sekarang akan ditugaskan untuk jalur 1 atau jalur 3 dll hingga keseimbangan (0) dan dengan demikian loop berulang dengan sendirinya.
sumber
Ini adalah solusi naif dan tidak mengasumsikan apa pun selain akan memungkinkan distribusi berbasis persentase. Solusi ini dapat ditingkatkan dalam banyak hal tetapi inilah intinya. Saya tidak yakin apakah ini yang Anda cari tetapi itu akan memberi Anda distribusi yang benar.
kode psuedo ...
sumber