顺序或随机比较更有效吗?

时间:2017-05-07 02:22:01

标签: performance random coding-efficiency sequential-number

我想知道(纯粹是出于好奇),如果按顺序或随机比较数字更有效。我最初认为按顺序比较数字会更有效率,但我不确定,而且我知道如何解决这个问题,所以我想我会问社区。

这是一些伪代码,以帮助解释我在想什么:

依序:

x = 1
y = random (1 to 5)

if (x == y){
  //finished
} else {
  x++
}

每次只会向x添加一个,直到它与y达到相同的值。例如,如果x5,则需要五轮才能完成,但如果x1则会在第一次尝试时获得。{ / p>

随机:

x = random (1 to 5)
y = random (1 to 5)

if (x == y){
  //finished
} else {
  x = New random (1 to 5)
}

每次都会将x设为新号码。例如,如果x5y5,则可能会在第一次尝试时获得,但理论上它可能永远不会得到它。

1 个答案:

答案 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%。