Sebuah sistem yang saya bangun mencakup satu set slider UI (jumlahnya bervariasi) masing-masing dengan skala 0-100. Dengan slider maksud saya adalah UI tempat Anda mengambil elemen dan menyeretnya ke atas dan ke bawah, seperti kontrol volume. Mereka terhubung oleh suatu algoritma yang memastikan mereka selalu berjumlah 100. Jadi ketika satu slider digerakkan ke atas, yang lainnya semua bergerak ke bawah, akhirnya ke nol. Ketika satu dipindahkan ke bawah, yang lain bergerak ke atas. Setiap saat total harus 100. Jadi di sini slider memiliki berbagai nilai, tetapi totalnya 100%:
----O------ 40
O---------- 0
--O-------- 20
--O-------- 20
--O-------- 20
Jika slider pertama kemudian bergerak naik dari 40 ke 70, yang lain harus memindahkan nilai ke bawah (karena slider diseret). Perhatikan tiga penggeser berubah dari 20 menjadi 10, dan satu tetap pada nol karena tidak bisa lebih rendah.
-------O--- 70
O---------- 0
-O--------- 10
-O--------- 10
-O--------- 10
Tentu saja ketika slider mana pun mencapai 0 atau 100, itu tidak bisa bergerak lebih jauh, yang mana kepala saya benar-benar mulai sakit. Jadi jika slider bergerak lebih tinggi, yang lain bergerak lebih rendah, tetapi ketika salah satu dari mereka mencapai nol hanya yang tersisa yang belum mencapai nol dapat bergerak lebih rendah.
Saya menanyakan ini di sini karena pertanyaan ini khusus untuk algoritme, bukan implementasinya. FWIW platformnya adalah Android Java, tetapi itu tidak terlalu relevan.
Pendekatan yang saya ambil dengan tikaman pertama saya adalah menghitung perubahan persentase slider yang bergerak. Saya kemudian membagi perubahan itu dan menerapkannya (ke arah lain) ke nilai slider lainnya. Masalahnya adalah bahwa dengan menggunakan persentase dan mengalikan, jika bilah geser mencapai nol, itu tidak akan pernah dapat ditingkatkan lagi dari nol - hasil bersihnya adalah bahwa bilah geser individu terjebak pada nol. Saya telah menggunakan slider dengan kisaran 0 - 1.000.000 untuk menghindari masalah pembulatan dan itu tampaknya membantu, tetapi saya belum membuat algoritma yang menangani semua skenario dengan baik.