Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何应对垂直杆挑战?_Algorithm_Data Structures_Probability - Fatal编程技术网

Algorithm 如何应对垂直杆挑战?

Algorithm 如何应对垂直杆挑战?,algorithm,data-structures,probability,Algorithm,Data Structures,Probability,这个问题来源于 给定整数数组Y=y1,…,yn,我们有n条线段 线段i的端点为(i,0)和(i,yi)。想象一下,从 在每一段的顶部,一条水平光线被投射到左侧,而这条光线 当它接触到另一段或碰到y轴时停止。我们 构造一个由n个整数v1,…,vn组成的数组,其中vi等于 从段i顶部拍摄的射线长度。我们定义V(y1,…,yn) =v1+…+越南 例如,如果我们有Y=[3,2,5,3,3,4,1,2],那么v1,…,v8= [1,1,3,1,1,3,1,2],如下图所示: 对于[1,…,n]的每个置

这个问题来源于

给定整数数组Y=y1,…,yn,我们有n条线段 线段i的端点为(i,0)和(i,yi)。想象一下,从 在每一段的顶部,一条水平光线被投射到左侧,而这条光线 当它接触到另一段或碰到y轴时停止。我们 构造一个由n个整数v1,…,vn组成的数组,其中vi等于 从段i顶部拍摄的射线长度。我们定义V(y1,…,yn) =v1+…+越南

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

对于[1,…,n]的每个置换p,我们可以计算V(yp1。。。, ypn)。如果我们选择[1,…,n]的一致随机排列p,那是什么 V(yp1,…,ypn)的预期值是多少

输入格式

6
3
1 2 3
3
3 3 3
3
2 2 3
4
10 2 4 4
5
10 10 10 5 10
6
1 2 3 4 5 6
4.33
3.00
4.00
6.00
5.80
11.15

输入的第一行包含一个整数T(1,正如您正确指出的,我们可以独立地解决每个棒的问题

设F(i,len)是排列数,来自棒i的光线正好是len。
那么答案是

(总和(由i,len)F(i,len)*len)/(n!)

剩下的就是计算F(i,len),设a(i)为棒数j,即y_jb_i

为了得到长度为len的光线,我们需要这样的情况

B, l...l, O  
   len-1 times
式中,O-表示棍子,i.B-表示棍子的长度较大,或开头较大。l-表示棍子的高度,小于ith

这给了我们两种情况:
1) B是开始,这可以通过
P(a(i),len-1)*(B(i)+a(i)-(len-1))实现方式。
2) B是更大的棒,这可以通过
P(a(i),len-1)*B(i)*(B(i)+a(i)-len)实现*(n-len)
方式


编辑:在(mul)中将b(i)改为第二项,以代替案例2中的a(i)。

如您所知,我们可以独立解决每个斗杆的问题

设F(i,len)是排列数,来自棒i的光线正好是len。
那么答案是

(总和(由i,len)F(i,len)*len)/(n!)

剩下的就是数F(i,len)。设a(i)为棒数j,即y_jb_i

为了得到长度为len的光线,我们需要这样的情况

B, l...l, O  
   len-1 times
其中O-是stick#i。B-是指长度较大的棍子,或是开头较大的棍子。l-是指粘着高度,小于ith

这给了我们两种情况:
1) B是开始,这可以通过
P(a(i),len-1)*(B(i)+a(i)-(len-1))实现方式。
2) B是更大的棒,这可以通过
P(a(i),len-1)*B(i)*(B(i)+a(i)-len)实现*(n-len)
方式


编辑:在(mul)中将b(i)改为第二项,以代替案例2中的a(i)。

我们可以通过以下方法解决此问题:

如果将第k个杆置于第i个位置,则该杆的预期射线长度是多少

然后,将所有位置的所有杆的所有预期长度相加,即可解决该问题

expected[k][i]
为放入第i个位置的第k个棒的预期射线长度,设
num[k][i][length]
为放入第i个位置的第k个棒的射线长度等于
length
的排列数,然后

expected[k][i]=sum(num[k][i][length]*length)/N

如何计算
num[k][i][length]
?例如,对于<代码>长度=3 < /代码>,请考虑下面的图表:

…GxxxI

其中,
I
是位置,3'x'表示我们需要3根比
I
严格低的棍子,
G
表示我们需要至少与
I
一样高的棍子。 假设
s_i
是小于
k
th的棍棒数,
g_i
是大于或等于
k
th棍棒数的棍棒数,那么我们可以选择
g_i
中的任何一个将其置于
g
位置,我们可以选择
s_i
的任何
length
来填充
x
位置,因此我们有:

num[k][i][length]=p(s_i,length)*g_i*p(n-length-1-1)

如果
I
之前的所有位置都小于
I
,我们不需要更大的
G
,即
xxxI….
,我们有:

num[k][i][length]=p(s_i,length)*p(n-length-1)

这里有一段Python代码可以解决这个问题:

def solve(n, ys):
    ret = 0
    for y_i in ys:
        s_i = len(filter(lambda x: x < y_i, ys))
        g_i = len(filter(lambda x: x >= y_i, ys)) - 1

        for i in range(n):
            for length in range(1, i+1):
                if length == i:
                    t_ret = combination[s_i][length] * factorial[length] * factorial[ n - length - 1 ] 
                else:
                    t_ret = combination[s_i][length] * factorial[length] * g_i * factorial[ n - length - 1 - 1 ]
                ret += t_ret * length

    return ret * 1.0 / factorial[n] + n
def solve(n,ys):
ret=0
对于y_i in ys:
s_i=len(滤波器(λx:x=y_i,ys))-1
对于范围(n)中的i:
对于范围(1,i+1)中的长度:
如果长度==i:
t_ret=组合[s_i][length]*阶乘[length]*阶乘[n-长度-1]
其他:
t_ret=组合[s_i][length]*阶乘[length]*g_i*阶乘[n-长度-1-1]
ret+=t_ret*长度
返回ret*1.0/阶乘[n]+n

我们可以通过以下方法解决此问题:

如果将第k个杆置于第i个位置,则该杆的预期射线长度是多少

然后,将所有位置的所有杆的所有预期长度相加,即可解决该问题

expected[k][i]
为放入第i个位置的第k个棒的预期射线长度,设
num[k][i][length]
为放入第i个位置的第k个棒的射线长度等于
length
的排列数,然后

expected[k][i]=sum(num[k][i][length]*length)/N

如何计算
num[k][i][length]
?例如,对于<代码>长度=3 < /代码>,请考虑下面的图表:

…GxxxI

其中,
I
是位置,3'x'表示我们需要3根比
I
严格低的棍子,
G
表示我们需要至少与
I
一样高的棍子。 设
s_i
为小于
k> 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