给出一个算法(或直接的 Python 代码),将 N 个项目集合的所有分区生成 K 个 bin,使得每个 bin 至少有一个项目。在订单很重要和订单不重要的情况下,我都需要这个。
顺序很重要的示例
>>> list(partition_n_in_k_bins_ordered((1,2,3,4), 2))
[([1], [2,3,4]), ([1,2], [3,4]), ([1,2,3], [4])]
>>> list(partition_n_in_k_bins_ordered((1,2,3,4), 3))
[([1], [2], [3,4]), ([1], [2,3], [4]), ([1,2], [3], [4])]
>>> list(partition_n_in_k_bins_ordered((1,2,3,4), 4))
[([1], [2], [3], [4])]
顺序无关紧要的示例
>>> list(partition_n_in_k_bins_unordered({1,2,3,4}, 2))
[{{1}, {2,3,4}}, {{2}, {1,3,4}}, {{3}, {1,2,4}}, {{4}, {1,2,3}},
{{1,2}, {3,4}}, {{1,3}, {2,4}}, {{1,4}, {2,3}}]
这些函数应该产生惰性迭代器/生成器,而不是列表。理想情况下,他们会使用itertools
. 我怀疑有一个聪明的解决方案正在躲避我。
虽然我在 Python 中提出了这个要求,但我也愿意翻译一个清晰的算法。