我有一组相互不同的元素(x_1,x_2,...,x_n)。每个元素都有一个正值(w_1,w_2,...,w_n)。这些正值的总和为1。
我必须找到一个Optimal元素(x_k),它是:
和
我找到了这个算法:
proc OptimalElement(arr[])
prevs_w := 0
nexts_w := 0
for (i = 0; i <= n; i++)
{
wi := arr[i].w
nexts_w := 1 - prevs_w - wi
IF (prevs_w < 0,5 && nexts_w <= 0,5) THEN
return arr[i]
ELSE
prevs_w := prevs_w + wi
ENDIF
}
end
但是该算法仅比较索引为i&lt; k和i&gt; ķ。但是我需要算法来计算x_i&lt;的项目总和。 x_k和x_i&gt; X_K。
算法应该有O(n)时间。你知道怎么解决吗? Thx for tips。
输入示例:
x_i | 1; 4; 2; 3; 5
w_i | 0,1; 0,2; 0,3; 0,2; 0,2
答案 0 :(得分:3)