我有特定順序的給定數量的框和特定順序的權重數。重量可能有不同的重量(即可能重1公斤,另外2公斤等)。 我想把重量放在箱子裏,以便它們儘可能均勻地分佈在重量上。我必須按照給定的順序來衡量權重,而且我必須按照它們給出的順序來填充這些框。也就是說,如果我把一個重量放在方框n + 1中,我不能在方框n中放置一個重量,並且我不能把重量m + 1放在一個方框中,直到我首先將重量m放在一個方框中。一個均勻的和有序的分佈問題
我需要找到一個算法來解決這個問題的任何數量的箱子和任何權重。
在C#與xUnit的幾個測試(分配是應該解決這個問題的方法):
[Fact]
public void ReturnsCorrectNumberOfBoxes()
{
int[] populatedColumns = Distribute(new int[0], 4);
Assert.Equal<int>(4, populatedColumns.Length);
}
[Fact]
public void Test1()
{
int[] weights = new int[] { 1, 1, 1, 1 };
int[] boxes = Distribute(weights, 4);
Assert.Equal<int>(weights[0], boxes[0]);
Assert.Equal<int>(weights[1], boxes[1]);
Assert.Equal<int>(weights[2], boxes[2]);
Assert.Equal<int>(weights[3], boxes[3]);
}
[Fact]
public void Test2()
{
int[] weights = new int[] { 1, 1, 17, 1, 1 };
int[] boxes = Distribute(weights, 4);
Assert.Equal<int>(2, boxes[0]);
Assert.Equal<int>(17, boxes[1]);
Assert.Equal<int>(1, boxes[2]);
Assert.Equal<int>(1, boxes[3]);
}
[Fact]
public void Test3()
{
int[] weights = new int[] { 5, 4, 6, 1, 5 };
int[] boxes = Distribute(weights, 4);
Assert.Equal<int>(5, boxes[0]);
Assert.Equal<int>(4, boxes[1]);
Assert.Equal<int>(6, boxes[2]);
Assert.Equal<int>(6, boxes[3]);
}
任何幫助,不勝感激!
謝謝!我會研究它! – 2009-08-17 15:23:31