这是问题所在:
用户有一个包含项目的购物篮,其中每个项目都有一组可用的交付类型,这是从一些定义的整体集合中选择的子集(例如 [“UK 2nd class”、“UK 1st class”、“UK Recorded Delivery”] ,但不要太拘泥于确切的名称)。
在完成结帐过程时,应向用户显示单独或组合交付的选项。
分离很容易 - 显示一个表格,其中每个项目都在自己的行中,并且列集与项目中可用交付类型的并集相匹配。每一行都包含一个单选按钮集,每一列都有一个按钮,该按钮是该项目可用的交付类型。
它结合在一起我不确定如何接近。仅当该组中的所有项目共享可用交付类型的子集时,才能将项目组合到一个组中。具有互斥交付类型的项目永远不能在同一个组中。购物篮可以包含来自多个供应商的物品;在这种情况下,来自不同供应商的产品可能不会组合在一起,即使它们共享一种交付类型。
客户要求计算最少组数,与每种邮资的费用无关。是的,这意味着如果四个项目的单独交付成本为 1+£2+£3+£4(四种不同的交付类型),但所有项目都共享一个成本为 15 英镑的第五个交付类型,那么用户将是为“组合”选项提供了一个更昂贵的组。
使用存储过程从数据库中检索项目的可用交付类型,并具有从类型 ID 和供应商 ID 创建的唯一标识符,因此很容易比较类型之间的相等性。但是,我似乎无法想出一个有效的算法来进行比较和生成组。
我希望在数据结构方面的最终结果是(伪代码):
Basket { List<Item> Items }
=>
GroupsTable {
List<SelectableDeliveryType> Columns,
List<Group { List<Item> }> Rows
}
其中每个都Item
包含自己的List<AvailableDeliveryType>
,然后可以很容易地用于计算出SelectableDeliveryType
将其单选按钮放入的列。
任何想法,指向涵盖此的一般算法概念的指针(例如,我不认为这是一个集合覆盖问题)等。非常感谢。