如何在O(nh)和O(nlog(h))复杂度中找到Pareto最优点?

时间:2017-03-28 16:55:13

标签: algorithm 2d computational-geometry convex-hull convex-polygon

任何人都可以建议找到帕累托最优点(形成楼梯)的算法,正如O(n*h)O(n*log(h))时间复杂度中的图表所示,其中h是帕累托最优点?

enter image description here

我使用礼品包装算法来解决这个问题(在O(n*h)中),但它只找到了凸包类型的阶梯,并错过了那些形成凹角的点。

1 个答案:

答案 0 :(得分:1)

将建议放在一个地方。

想法是使用分而治之的策略。如果我们能找到帕累托点P,它将剩余的帕累托点分成O(n)中的一半,而不是O(n log(h))。这可以通过在P的右边,P的左边和上边,P的左边和下边三个部分中分割点来检查。第三组没有帕累托点。并且在其他两组点上递归地执行相同的过程。将比例设置为三个部分:a, b, 1 - a - b。这种复杂性是:

T(n, h) = T(a*n, h/2) + T(b*n, h/2) + O(n)
       <= T(n, h/2) + O(n)
       <= T(n, h/4) + 2 * O(n)
       <= T(n, h/8) + 3 * O(n)
       <= ...
       <= O(n log(h))

问题是在&lt; = O(n)中找到具有该特征的帕累托点。一些简单的启发式方法,如P,其中x> =(min(x)+ max(x))/ 2,可能会得到非常好的平均值。

我不确定,但我认为可以使用k-th order statistic找到具有该特征的点。与finding median as pivot in quicksort类似。