Consider a matrix x
x = [ 1 2 0 0 5 0 3 0 8 ]
If we sum x along the rows we get
row_sums = [3 5 11]
Summing along the columns gives
col_sums = [4 7 8]
Metaphorically, we might call these sums "x-rays". Your job is to take these x-rays and reconstruct the matrix x being x-rayed, in the fashion of a CAT scan. Can you put all the bones in the right place?
All matrix elements must be non-negative integers. There is no guarantee of a unique answer. I will only check that the row and column sums match the supplied matrix, and that your elements are non-negative integers.
Bonus question: Under what circumstances does the answer become unique? Discuss.
regarding the discussion question, my guess is that the only cases where the answer becomes unique are those 'trivial' single-vector or equivalent cases. More precisely those cases where min(nnz(row_sums),nnz(col_sums))<=1. The reasons is that if one solution exist where x(a,b)>0 and x(c,d)>0 (and a~=c and b~=d; i.e. they are not in the same row or column), then you could simply subtract one from x(a,b) and x(c,d), and add one to x(c,b) and x(a,d), and the result will also be a valid solution... thoughts?
I confess, I found the results using intlinprog.
I would love to know how you came up with that.
Which values occur exactly three times?
4144 Solvers
1019 Solvers
Arrange Vector in descending order
2867 Solvers
Make a run-length companion vector
472 Solvers
1389 Solvers