I'm trying to generate a random solvable instance of the Subset Sum Problem. Wikipedia states that the target value should always be zero, but it's also possible to specify the target value, which is what I'm doing here.
So the idea is to create a random vector using (gen/vector gen/int)
and then sample a random sub-vector and sum up that vector to create the target value. The problem with the obvious strategy using gen/elements
is that it may sample the same element repeatedly.
My next best idea is to create a random set of indices and extract all the elements at those indices. Is there a simpler approach?
This code is a mock-up of what I think you are trying to do. It generates a vector of integers, each of which has a flag to indicate if it belongs in the subset (it could be none, some, or all). A dummy function (standin for subset-sum) decides if the test passes. You will need
[tupelo "0.9.56"]
in yourproject.clj
.The above code generates output like this: