Ищете нежадный способ разделения списка массивов на 2 столбца [дубликат]C#

Место общения программистов C#
Anonymous
Ищете нежадный способ разделения списка массивов на 2 столбца [дубликат]

Сообщение Anonymous »

Я рассматриваю код, позволяющий разбить список массивов на два столбца и убедиться, что длина одного столбца (сумма членов элементов) максимально близка к длине другого столбца.
Вот что я пробовал:
using System;
using System.Collections.Generic;

namespace DistributeFairly
{
public class Program
{
public static int[] AssignColumns(IList arrays, int columnCount)
{
int[] columnAssignments = new int[arrays.Count];
int[] columnSizes = new int[columnCount];

for (int i = 0; i < arrays.Count; i++)
{
// Find the column with the smallest current size (non-greedy/balanced)
int minColumn = 0;

for (int c = 1; c < columnCount; c++)
{
if (columnSizes[c] < columnSizes[minColumn])
minColumn = c;
}

columnAssignments = minColumn;
columnSizes[minColumn] += arrays.Length;
}

return columnAssignments;
}

public static void Main(string[] args)
{
var arr1 = new []{1,2,3,4,5};
var arr2 = new []{1,2};
var arr3 = new []{1,2,5,6,7,7,7,7,8,7,7,8,7,6};
var arr4 = new []{1,2};

var arrays = new List { arr1, arr2, arr3, arr4 };
int[] columns = AssignColumns(arrays, 2); // Assign to 2 columns

Console.WriteLine(columns[0]);
Console.WriteLine(columns[1]);
Console.WriteLine(columns[2]);
Console.WriteLine(columns[3]);
}
}
}

Я получаю следующий результат:
0
1
1
0

.NET Fiddle
Но я ожидаю, что (arr1, arr2 и arr4) в столбце 1 и arr3 во втором столбце:
0
0
1
0

Вернуться в «C#»