我有以下问题。通用子集算法问题
我有一套物品{a1, a2, a3, ... aN}
。这些项目中的每一个都可以包含另一组项目{b1, b2, b3, ... bN}
。所以,最终的结果看起来是这样的:
a1
b4
b22
b40
b11
b9
a2
b30
b23
b9
b4
b11
a3
b22
b4
b60
b9
由于算法执行的结果,我想获得,根据以下规则回落b型对象组:
- 如果一个a型对象下的多于一个b型对象只存在于该a型对象下,它们应该被分组。
- 如果在多于一个a型对象中使用多个b型对象,也应该对它们进行分组。
例子:
b4, b9
b30, b23
b40, b60, b11 and b22 shouldn't be grouped because there are no pairs for them.
我会写这个算法在C#中的实现,所以这将是很好的避免不其存在的数据结构,如二进制树,链表等等,但这不是要求;所有这些都可以实施。
澄清:集合可以根据需要包含尽可能多的对象,但不能多于1个。规则是所有在同一个a类型中的b类型的唯一对象应该被分组(大于1),并且如果多于一个b类型的对象属于多于1个a类型的对象,它们应该被分组。这些团体应该尽可能大。
活生生的例子:网站页面A型并在这些网页中使用的CSS文件b型。为了加快页面的加载速度,你希望有尽可能少的请求到达服务器,所以你结合了CSS文件,但是你不想合并仅在几页上使用的文件,因为它们将被缓存,并且不必再次重新下载它们。
C#确实有链接列表btw:http://msdn.microsoft.com/en-us/library/he2s3bh7(loband).aspx – recursive 2009-08-29 03:17:50
你可以尝试澄清你的分组规则?另外,你只是试图获得一组配对,还是有可能让一个组包含3个或更多的b型对象? – aem 2009-08-29 03:18:12
我明白你为什么分组{b4,b9}和{b30,b23},但我不明白为什么{b4,b60}已被分组。 – Preets 2009-08-29 04:23:46