首页 / C# / c#-基于多个共享属性值的最小对象分组
c#-基于多个共享属性值的最小对象分组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-基于多个共享属性值的最小对象分组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2234字,纯文字阅读大概需要4分钟。
内容图文
![c#-基于多个共享属性值的最小对象分组](/upload/InfoBanner/zyjiaocheng/656/4d0d5f7ccd484c3eb8222691ab73fe12.jpg)
这是问题所在:
用户拥有一个包含物品的购物篮,其中每个物品都有一组可用的交付类型,这些交付类型是从某些已定义的总体集合中选择的子集(例如[“英国第二类”,“英国第一类”,“英国记录的交付”] ,但不要太在意确切的名称).
在进行结帐过程时,应为用户提供单独或组合交付的选项.
分开很容易-将显示一个表格,其中每个项目都在其自己的行上,并且列集与项目之间可用的交付类型的并集相匹配.每一行都包含一个单选按钮集,每一列都有一个按钮,该按钮是该项目可用的交付类型.
我不确定该如何结合.仅当该组中的所有项目共享可用交货类型的子集时,才能将这些项目组合到一个组中.具有互斥交付类型的项目永远不能在同一组中.购物篮可以容纳来自多个供应商的物品.在这种情况下,即使来自不同供应商的产品共享一种交付类型,也可能不会将它们分组在一起.
客户要求计算最少的组数,而与每种邮资的成本无关.是的,这意味着,如果四件物品的单独交付费用为£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之类的启发式方法,或者找到其他解决此问题的方法.
抱歉,结果是负面的,但希望对您有所帮助!
内容总结
以上是互联网集市为您收集整理的c#-基于多个共享属性值的最小对象分组全部内容,希望文章能够帮你解决c#-基于多个共享属性值的最小对象分组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。