【发布时间】:2012-01-19 12:55:48
【问题描述】:
我会尝试用数学语言来解释这个问题。
假设我有一组项目X = {x_1, x_2, ..., x_n}。 X 的每一项都属于集合S_1, S_2, ..., S_5 之一。我认为X 的所有子集由 5 个项目组成:
{x_i1, x_i2, ..., xi5} 所以x_i1 属于S_1,...,x_i5 属于S_5。
一些子集被认为是正确的,而一些子集被认为是不正确的。如果子集不包含冲突项,则认为子集是正确的。我有一个函数 f1 来确定一对项目是否冲突。
我还有一个函数 f2,它可以比较这些正确的子集并说出哪个子集更好(它们也可能相等)。
我需要找到最好的不冲突的子集。
我使用的算法:
我构建了所有子集,丢弃了不正确的子集。然后我使用 f2 作为排序函数对正确的子集进行排序,并首先选择最佳子集(我使用了快速排序算法)。就存在大量子集而言,此过程花费的时间不足。
在时间消耗方面有更好的方法吗?
更新
让我们将 x_i 视为具有整数端点的区间。如果 2 个区间不相交, f1 返回 true,否则返回 false。 f2 比较子集中区间的总和长度。
【问题讨论】:
-
如果没有更多关于用于对子集进行排名的函数的详细信息,我认为不可能做得更好;考虑一个函数,它赋予除一个子集之外的所有内容的权重 0,该子集的权重为 1。找到该子集的唯一可能方法是将它们全部列出,除非您已经对该函数有所了解。
-
我猜 f2 与 f1 有某种关系
-
我更新了帖子,让问题更清楚了。
-
首先,开始优化,你需要弄清楚,哪个部分花费的时间最多。制定基准并更新问题。
-
我在这里需要的不是微优化,而是另一种解决相同问题的方法。所以我认为没有必要进行分析。
标签: algorithm