我尝试做的是按产品分组,并确保相同的产品总是被安排在相同的日期计数,daysScheduled不能超过产品类型MILK、CHAIR、TABLE、TV = 4产品类型,max scheduledDays将是4,scheduledDays可以是另一个输入,也可以是产品列表
int daysScheduled = 2
IList<Product> products = new List<Product>();
products.Add(new Product("CHAIR", "456"));
products.Add(new Product("CHAIR", "456"));
products.Add(new Product("TABLE", "789"));
products.Add(new Product("TABLE", "789"));
products.Add(new Product("TV", "567"));
products.Add(new Product("TV", "567"));
products.Add(new Product("MILK", "123"));
products.Add(new Product("MILK", "123"));
products.Add(new Product("MILK", "123"));
products.Add(new Product("MILK", "123"));
products.Add(new Product("MILK", "123"));
products.Add(new Product("MILK", "123"));
products.Add(new Product("MILK", "123"));
分组方式不佳,因为第二天有两个产品(9条记录),其中一个可以移动到第一天,以便有更好的分组方式(平均记录),请注意,不可能拆分产品,如果移动了一个产品,则该产品的所有记录也应移动
// DAY 1 => type of products=2, records=4
products.Add(new Product("CHAIR", "456"));
products.Add(new Product("CHAIR", "456"));
products.Add(new Product("TABLE", "789"));
products.Add(new Product("TABLE", "789"));
// DAY 2 => type of products=2, records=9
products.Add(new Product("TV", "567"));
products.Add(new Product("TV", "567"));
products.Add(new Product("MILK", "123"));
products.Add(new Product("MILK", "123"));
products.Add(new Product("MILK", "123"));
products.Add(new Product("MILK", "123"));
products.Add(new Product("MILK", "123"));
products.Add(new Product("MILK", "123"));
products.Add(new Product("MILK", "123"));
预期结果,因为平均记录每天的数量几乎相同
// DAY 1 => type of products=3, records=6
products.Add(new Product("CHAIR", "456"));
products.Add(new Product("CHAIR", "456"));
products.Add(new Product("TABLE", "789"));
products.Add(new Product("TABLE", "789"));
products.Add(new Product("TV", "567"));
products.Add(new Product("TV", "567"));
// DAY 2 => type of products=1, records=7
products.Add(new Product("MILK", "123"));
products.Add(new Product("MILK", "123"));
products.Add(new Product("MILK", "123"));
products.Add(new Product("MILK", "123"));
products.Add(new Product("MILK", "123"));
products.Add(new Product("MILK", "123"));
products.Add(new Product("MILK", "123"));
pdta.保持添加产品的顺序
我该怎么做?请帮帮忙
1条答案
按热度按时间qhhrdooz1#
如果我理解正确的话,需要将N个不同类型的项目(类型数- X)放置在Z个“天”中,这样一种类型的项目将被放置在同一个“天”中,如果可能的话,“天”中的项目数应该相同,等于N/Z。
解决方案1是将所有项目按类型分组,然后检查将这些组划分为Z“天”的所有可能组合,并找出最佳结果。该解决方案可以给予最准确的结果,但在时间方面非常昂贵- O(X^Z)
解决方案2是使用Greedy algorithm,这种算法经常用于解决类似的优化问题,它不能保证给予最好的结果,但它的时间复杂度要低得多,因此,在当前任务中,我们需要按类型对项目进行分组,按项目数降序排序,然后挑选项目,直到项目数小于或等于N/Z