A Smart Backtracking Algorithm for Computing Set Partitions with Parts of Certain Sizes
Let α={a_1,a_2,a_3,...,a_n} be a set of elements, δ < n be a positive integer, and Γ: α→{0, 1, 2, ..., n} be a total mapping. Then, we call Γ a partition of α if and only if for all x ∈α, Γ(x) ≠ 0. Further, we call Γ a δ-partition of α if and only if Γ is a partition of α and for all i ∈{1, 2, 3, ..., n}, |{x: Γ(x)=i}| > δ. The so-far open issue that we close in this paper is regarding whether the δ-partitions of α can be computed without computing the partitions of α in advance. As we show in this paper, this issue is not as trivial as it might seem at first sight, especially if any naive generate-and-test procedure has to be avoided. To resolve this issue, we give a formal proof of the correctness of a smart backtracking algorithm that computes the δ-partitions of α efficiently without a prior construction of the partitions of α. The algorithm does so by checking (ahead) two properties identifying parts of the search space that are devoid of any δ-partition of α.
READ FULL TEXT