首页 > 平均分配算法实现?

平均分配算法实现?

假设有A,B,C三个域。每一个域中可存放ip记录,如:
A:
1.1.1.1
2.2.2.2
5.5.5.5
假设A中有50条记录,B中有30条记录,C中有32条记录。现在有一批ip记录,如500个ip,需要尽量平均分配到这3个域中,如何实现这个功能?


这种情况常用的两种算法:
1. 轮询,可以精准的保持平均,但是实现逻辑会略微复杂一点。并发情况需要考虑锁,涉及负载均衡需求的场景会经常用这种方式。
2. 随机,也就是用hash算法分配到任意一个bucket里面。这个方式实现简单,也有很多办法可以实现类似的效果,但数据量小的时候有几率会不平均。


除此之外,考虑到如果bucket数量会动态扩展还要保持平均,这种场景在分布式中非常常见,通常采用一致性hash


先把A,B和C中的记录都取出来,然后依次循环给每个域插一条?


在A,B,C记录条数平均之前,每次都插入到记录条数最少的哪个域不就好了,记录条数平均之后,就循环呗


hash table 也遇到了類似的問題。

所以你的可行解決方案之一也是 hash,然後映射到這三個域上。


参考抽奖算法? alias method ?

【热门文章】
【热门文章】