任何人都可以建议找到帕累托最优点(形成楼梯)的算法,正如O(n*h)
和O(n*log(h))
时间复杂度中的图表所示,其中h
是帕累托最优点?
我使用礼品包装算法来解决这个问题(在O(n*h)
中),但它只找到了凸包类型的阶梯,并错过了那些形成凹角的点。
答案 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类似。