可能有很多方法可以满足每个孩子对玩具的需求。
问题:鉴于N,{T i },{t i }和种子RNG,来自所有可能的玩具配置我需要选择一个均匀分布(或至少接近均匀分布)的配置,即从孩子到他们拥有的玩具的映射。
生成所有可能的配置并选择j-th是不行的 - 可能会有很多这样的配置。
在下面的示例中,有4个孩子:红色,蓝色,绿色和黄色。红色需要拥有 4个玩具,蓝色 - 5,绿色 - 3,黄色 - 3.玩具儿童喜欢在相应颜色的矩形内。
所以我需要的是生成分布均匀的Map<Child, Set<Toy>>
的算法大纲,或任何有助于解决问题的链接。
答案 0 :(得分:1)
准备如下的二分图。对于每个孩子i
,请设置t_i
个顶点。对于每个玩具j
,制作一个顶点。每当孩子i
喜欢玩具j
时,请将i
的所有顶点连接到j
的顶点。玩具对儿童的有效分配对应于此图中的完美匹配。使用您最喜欢的匹配算法(例如Hopcroft--Karp)计算一个作业,然后根据需要运行Jerrum and Sinclair的马尔可夫链。