如何应对立式棍棒挑战


23

这个问题来自于viewstreet.com

我们给出一个整数数组表示线段,使得段的端点是和(I,Y_I) 。想象一下,从每个线段的顶部向左发射水平射线,当该射线接触另一个线段或撞击y轴时,该射线停止。我们构造了一个由n个整数组成的数组v_1,...,v_n,其中v_i等于从段i顶部射出的射线的长度。我们定义V(y_1,...,y_n)= v_1 + ... + v_nY={y1,...,yn}0 ÿ v 1v Ñ v V Ý 1ÿ Ñ= v 1 + + v nni(i,0)(i,yi)v1,...,vnviiV(y1,...,yn)=v1+...+vn

例如,如果我们有Y=[3,2,5,3,3,4,1,2],则[v1,...,v8]=[1,1,3,1,1,3,1,2],如下图所示:

在此处输入图片说明

对于每个排列的,我们可以计算。如果我们选择一个均匀随机排列的什么是预期值?[ 1 Ñ ] V Ý p 1ÿ p Ñp [ 1p[1,...,n]V(yp1,...,ypn)p[1,...,n]V(yp1,...,ypn)

如果我们使用朴素的方法解决此问题,它将不会有效,并且几乎永远运行。我相信我们可以通过独立地计算每个棍子的的期望值来解决此问题,但是我仍然需要知道是否还有另一种有效的解决方法。我们可以在什么基础上独立计算每个棍子的期望值?n=50vi


您可以使用期望线性。这个问题可能是更合适的math.SE

Answers:


23

想象一个不同的问题:如果必须将等高的摇杆放置在个插槽中,则摇杆之间的预期距离(以及第一个摇杆与名义插槽之间的预期距离以及最后一个摇杆与名义插槽之间的预期距离槽)为因为存在间隙以适合长度。n 0 n + 1 n + 1kn0n+1 k+1n+1n+1k+1k+1n+1

回到这个问题,特定的棒对多少棒(包括自身)的高或高感兴趣。如果此数字为,则其左侧的预期间隙也为 。n + 1kn+1k+1

因此,算法仅是为每个棍子找到该值并加总期望值。例如,以高度开始,具有更大或相等高度的棍子数为因此,期望值为。[ 5 7 1 5 5 2 8 7 ] 9[3,2,5,3,3,4,1,2][5,7,1,5,5,2,8,7]96+98+92+96+96+93+99+98=15.25

这很容易编程:例如R中的一行

V <- function(Y){ (length(Y) + 1) * sum( 1 / (rowSums(outer(Y, Y, "<=")) + 1) ) }

给出原始问题中样本输出中的

> V(c(1,2,3))
[1] 4.333333
> V(c(3,3,3))
[1] 3
> V(c(2,2,3))
[1] 4
> V(c(10,2,4,4))
[1] 6
> V(c(10,10,10,5,10))
[1] 5.8
> V(c(1,2,3,4,5,6))
[1] 11.15

1
很有意思。您能否详细说明一下棒之间的预期距离为何为;因为目前还不清楚(至少对我来说)它是如何计算的。谢谢。(n+1)/(k+1)
M. Alaggan

在我的等高杆的第一种情况下,长度为,要用间隙填充,因此平均间隙来自于彼此除以。这是在任何特定棒之前(从最后一根棒到)的预期间隙(或水平射线)。考虑到比任何特定棍子都高或高的棍子,它转移到原始问题。n + 1 k + 1 n + 1kn+1k+1n+1
亨利

非常好。这完全包含了我的解决方案。如果所有高度都不相同,则。E[V]=k=1nn+1k+1=(n+1)(Hn+11)=(n+1)Hnn
JeffE

2
@亨利:对于k个棍棒相等的高度,n个插槽问题,您对平均长度=(n + 1)/(k + 1)的解释是什么?如果我有k个棒,并且我想知道n个插槽中k个棒的每个排列中每个棒的平均射线长度,则它的确等于您的结果,但是我不明白为什么。有逻辑还是从我对1个摇杆和n个插槽,然后2个摇杆和n个,插槽,... k个摇杆,n个插槽的描述中所做的数学上推论得出的,并注意到它等于(n +1)/( k + 1)?您提到添加n + 1个插槽。这似乎很违反直觉。
2013年

3
这是我以前处理过的一个问题。首先从具有个座位和个座位的圆桌会议开始,然后随机坐下。个体之间的距离显然等于平均值。现在,在人处打破桌子,移开该人及其座位,并伸直桌子。现在,您在这里有个席位和人员,但具有相同的iid属性和相同的均值的问题。(发现本月稀有的押韵)ķ + 1 Ñ + 1 /ķ + 1 ñ + 1 Ñ ķn+1k+1(n+1)/(k+1)n+1thnk
亨利

11

亨利的解决方案比这个解决方案既简单又通用!


E[V]大约是随机快速排序所进行比较的预期数量的一半。

假设棒具有不同的高度,我们可以得出的闭式解,如下所示。E[Y]

对于任何指数,让,如果和,否则。(如果对元件是显着,则装置,其是严格比的每一个元件更大)。X Ĵ = 1 Ŷ Ĵ = 最大{ ý Y j } X i j = 0 Y X i j = 1 Y j { Y iY j 1 }ijXij=1Yj=max{Yi,...,Yj}Xij=0YXij=1Yj{Yi,,Yj1}

那么对于任何索引,我们都有(您知道为什么吗?),因此 v j = j i = 1 X i j V = n j = 1 v j = n j = 1 j i = 1 X i jjvj=i=1jXij

V=j=1nvj=j=1ni=1jXij.

期望线性立即意味着

E[V]=E[1ijnXij]=1ijnE[Xij].

因为是或,所以我们有。 0 1 E [ X i j ] = Pr [ X i j = 1 ]Xij01E[Xij]=Pr[Xij=1]

最后,这是重要的一环,因为中的值是不同的且均匀地排列,因此子集每个元素同样有可能成为该子集中的最大元素。因此,。(如果的元素没有区别,我们仍然有。)Y{Yi,...,Yj} ÿ[XĴ=1]1Pr[Xij=1]=1ji+1YPr[Xij=1]1ji+1

现在我们有了一些数学。 其中表示第次谐波数

E[V]=j=1ni=1jE[Xij][linearity]=j=1ni=1j1ji+1[uniformity]=j=1nh=1j1h[h=ji+1]=h=1nj=hn1h[1hjn]=h=1nnh+1h=((n+1)h=1n1h)(h=1n1)=(n+1)Hnn
Hnn

现在,以时间计算(达到浮点精度)应该是微不足道的。E[V]O(n)


这是否假设棍棒的高度不同?
Aryabhata'4

是的,它确实具有不同的高度。(显然,我误解了这个问题。)当存在联系时,与随机快速排序的等效性仍然存在,但对于封闭形式的解决方案则不成立。
JeffE

4

如评论中所述,您可以使用期望线性。

对排序:。yy1y2yn

对于每个考虑的期望值。yivi=E[vi]

然后E[i=1nvi]=i=1nE[vi]

一种简单而天真的计算方法是首先确定的位置。说。E[vi]yij

现在计算在位置具有值的概率。j1yi

然后概率,在你有一个值和你有一个值j1<yij2yi

等等,这样您就可以计算。E[vi]

您可能可以通过实际进行数学运算并得到一个公式来加快计算速度(不过我自己还没有尝试过)。

希望能有所帮助。


3

扩展@Aryabhata的答案:

固定一个,并假设项y i在位置j。高度的确切值并不重要,重要的是项目是否大于或等于y i。因此,要考虑的一组项目Ž ,其中Ž ķ是1,如果ý ķÿ ,和 Ž ķ是否则为0。iyijyiZ(i)zk(i)ykyizk(i)

集合的排列引起集合Y的对应排列。例如,考虑集合Z i 的以下置换:“ 01000(1) ”。该项目ž 是一个括号,在位置Ĵ,并表示该项目“ ...... ”没有的事。Z(i)YZ(i)zi(i)j

那么,值为1加上紧靠z i i左边的连续零行的长度。由此可见,Ë v 实际上是1加连续zeors预期长,直到第一个“1”被满足,如果我们选择最多Ĵ - 1个订位Z ^ vizi(i)E(vi)j1Z(i)zi(i)(无需更换)。这使人想起了几何分布,除了它不用替换(和抽签的有界数)。对的期望也应作为对位置{ 1 n }的集合的统一选择。j {1,,n}

一旦计算(沿着这些行),我们就可以遵循@Aryabhata答案的行。


-2

我不太了解您对标签的要求,似乎您正在寻找一种算法。

如果是,预期时间复杂度是多少?这样说:“如果我们使用幼稚的方法解决此问题,它将不会有效,并且几乎永远运行n = 50。” 在我看来,您的幼稚方法可以在指数时间内解决。

我确实有一个O(n ^ 2)算法。

assume int y[n], v[n] where v[i] initialized with 1; as described in the question
for (i=1;i<n;i++) 
   for ( j=i-1 ; j>=0 && y[j]<y[i] ; j--) v[i]++;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.