我想知道(纯粹是出于好奇),如果按顺序或随机比较数字更有效。我最初认为按顺序比较数字会更有效率,但我不确定,而且我知道如何解决这个问题,所以我想我会问社区。
这是一些伪代码,以帮助解释我在想什么:
x = 1
y = random (1 to 5)
if (x == y){
//finished
} else {
x++
}
每次只会向x
添加一个,直到它与y
达到相同的值。例如,如果x
为5
,则需要五轮才能完成,但如果x
为1
则会在第一次尝试时获得。{ / p>
x = random (1 to 5)
y = random (1 to 5)
if (x == y){
//finished
} else {
x = New random (1 to 5)
}
每次都会将x
设为新号码。例如,如果x
为5
且y
为5
,则可能会在第一次尝试时获得,但理论上它可能永远不会得到它。
答案 0 :(得分:2)
对于顺序搜索,预期的比较次数与y
的预期值相同,即3。
对于您的随机搜索,比较次数是geometric random variable(一个变量,它在一系列独立的伯努利试验中首次成功的试验),参数p = 1/5
。这种变量的期望值是1/p
,在这种情况下是5。
从5开始> 3,平均而言,第二种方法将涉及比第一种方法更多的比较。在实践中,第二种方法的平均运行时间将比这个论点更糟糕,因为循环连续的整数很快但随机数生成相对较慢。
对于任意n
而不是n = 5
,第一种情况下将进行(n+1)/2
次比较,第二种情况下将进行n
次比较。因此,随机搜索的平均步数是平均两倍。此外,所需比较次数的方差在第一种情况下为(n^2-1)/12
(按this),在第二种情况下为n^2-1
,因此案例的变异性更大随机搜索。如果您是乐观主义者,这意味着您比预期的数字n
显着低于比较的可能性更高。但这有时需要更多,这是平衡的。例如,对于n=5
,随机搜索将使用超过10次比较的概率为(4/5)^ 10 = 10.7%。