编程语言
首页 > 编程语言> > c#-基于多个共享属性值的最小对象分组

c#-基于多个共享属性值的最小对象分组

作者:互联网

这是问题所在:

用户拥有一个包含物品的购物篮,其中每个物品都有一组可用的交付类型,这些交付类型是从某些已定义的总体集合中选择的子集(例如[“英国第二类”,“英国第一类”,“英国记录的交付”] ,但不要太在意确切的名称).

在进行结帐过程时,应为用户提供单独或组合交付的选项.

分开很容易-将显示一个表格,其中每个项目都在其自己的行上,并且列集与项目之间可用的交付类型的并集相匹配.每一行都包含一个单选按钮集,每一列都有一个按钮,该按钮是该项目可用的交付类型.

我不确定该如何结合.仅当该组中的所有项目共享可用交货类型的子集时,才能将这些项目组合到一个组中.具有互斥交付类型的项目永远不能在同一组中.购物篮可以容纳来自多个供应商的物品.在这种情况下,即使来自不同供应商的产品共享一种交付类型,也可能不会将它们分组在一起.

客户要求计算最少的组数,而与每种邮资的成本无关.是的,这意味着,如果四件物品的单独交付费用为£1£2£3£4(四种不同的交付类型),但所有物品共享第五种交付类型,费用为£15,则将向用户显示“组合”选项的单个更昂贵的组.

Here is an HTML example of separate/combined options.

可以使用存储过程从数据库中检索物料的可用交货类型,并具有根据类型ID和供应商ID创建的唯一标识符,因此可以轻松比较类型之间的相等性.但是,我似乎无法想到一种进行比较和生成组的有效算法.

我希望在数据结构方面的最终结果是(伪代码):

Basket { List<Item> Items }
=>
GroupsTable {
    List<SelectableDeliveryType> Columns,
    List<Group { List<Item> }> Rows
}

其中每个项目都包含其自己的List< AvailableDeliveryType>然后可以轻松地计算出要插入其单选按钮的SelectableDeliveryType列.

任何想法,指向涵盖此内容的通用算法概念的指针(例如,我不认为它是set cover problem)等,都非常感谢.

解决方法:

这个问题从7000减少为NP-hard.给定一个图,该图由一组由边连接的节点组成,该图中的k着色是一种为图中的每个节点着色的方式,因此没有两个连接的节点具有相同的颜色.色数问题如下-可以给图形着色的最小色数是多少?

我们可以将色度问题的任何实例(NP难题)减少为您的问题,如下所示:对于每个节点,创建一个新产品.对于每个边缘,标记不能将这两个产品分组到同一群集中.然后,这些产品的任何群集都对应一种着色-只需将每个群集中的所有节点都着色为相同的颜色即可.因此,最佳地解决您的问题等同于解决图形着色,因此(假设P ≠ NP)没有多项式时间算法.

不幸的是,众所周知,图形着色很难估计.没有已知的多项式时间算法可以在恒定的最优因子内,甚至对于任何ε≥n1-ε都可以. 0.我认为最好是使用Chaitin’s algorithm之类的启发式方法,或者找到其他解决此问题的方法.

抱歉,结果是负面的,但希望对您有所帮助!

标签:grouping,c,algorithm
来源: https://codeday.me/bug/20191201/2078111.html