查找极高阶元素关系的优先级函数/字母顺序

时间:2011-02-13 00:02:43

标签: algorithm math

此问题是following one的扩展。不同之处在于,现在我们的优化功能将在元素之间具有更高阶的关系:

我们有一个来自字母a1,a2,...aN的元素数组E。假设|N| >> |E|

对于字母表中的每个符号,我们定义一个唯一的整数优先级= V(sym)。为简单起见,我们定义V{i} := V(symbol(ai))

任务是找到优先级函数V,其中包括:

Count(i)->MIN |   V{i} > V{i+1} <= V{i+2}

换句话说,我需要找到满足条件i的职位数V{i}>V{i+1}<=V{i+2}最小的字母表的优先顺序/排列。

最大需要抽象(对我来说是低优先级)。我想一旦initial question的解决方案模型扩展到覆盖这一部分的第一部分,将其扩展得更远(见下文)会更容易。

给定一个大小为MxK的符号B矩阵(基本上B[i,j]来自集合{<,>,<=,>=}),找到优先级函数V,其中:

Sum(for all j in range [1,M]) {Count(i)}->EXTREMUM | V{i} B[j,1] V{i+1} B[j,2] ... B[j,K] V{i+K}

例如,找到优先级函数Vi满足V{i}<V{i+1}<V{i+2}V{i}>V{i+1}>V{i+2}的数量最少。

1 个答案:

答案 0 :(得分:1)

我的直觉是,这个问题的所有变化都将证明是NP难的。所以我开始寻找可以产生合理答案的启发式方法。这可能涉及一些反复试验。

一种简单的方法是记下可能的排列。然后尝试可能的互换,直到你到达当地最低点。尝试几次,然后选择最佳答案。

模拟退火提供了此方法的更复杂版本,请参阅http://en.wikipedia.org/wiki/Simulated_annealing以获取说明。可能需要进行一些实验才能找到一组似乎相对较好收敛的参数。

另一个想法是寻找遗传算法。基于快速谷歌搜索,看起来这样做的标准方法是尝试将NP完全问题转化为SAT问题,然后在该问题上使用遗传算法。这种方法需要以某种合理的方式将其转化为SAT问题。不幸的是,我不明白如何进行这种减少。事实上,在你的第一个版本中,你的问题与经典的NP难问题密切相关。它被标记为NP-hard而非NP-complete的事实证明人们还没有找到将其转化为SAT问题的好方法。因此,如果将简单版本转换为SAT问题并不明显,那么您也不太可能转换硬问题。

但你仍然可以尝试遗传算法的一些变化。变异非常简单,只需交换一些元素。组合元素的一种方法是采用3种排列并使用快速排序来查找组合,如下所示:采用随机旋转,然后使用“多数胜利”将元素分解为更大和更小。以相同的方式对每一半进行排序。

对不起,我不能只是给你一个方法并说,“这应该有效。”你看起来像是一个开放式的研究项目,我能做的最好的就是给你一些关于你可以尝试的事情的想法,这些事情可能会运作得相当好。