我怀疑二元搜索中比较次数的递归关系。
我读到本网站的复发可以写成T(n)= T(n / 2)+ 1 http://faculty.simpson.edu/lydia.sinapova/www/cmsc250/LN250_Weiss/L14-RecRel.htm
据我说它应该是T(n)= T(n / 2)+ 2,因为在最坏的情况下,元素可能不存在于数组中,我们最终在每次传递中进行2次比较。
请告诉我是对还是错。
答案 0 :(得分:1)
我认为你是对的。
恕我直言,compare a b
表示我们同时了解a=b
,a>b
或a<b
。也就是说,1比较可能有3种不同的结果。
但是对于编程语言。我们必须使用2次比较。
if mid == x: found it! # 1st
else if mid < x: search right # 2nd
else: search left
您的意思是==
和<
是2次比较。
虽然不影响结果。因为我们使用大O表示法来表示复杂性。这只是一个不变的问题,但O
通常不关心它。
根据master theorem。 +1
或+2
会产生相同的复杂性O(log n)
。
我们想要的通常是限制(Big-O
),而不是数学方程的精确结果。
我认为重要的是1
和2
都是恒定时间。我们还可以将==
,>
拆分为机器指令,它可能大于2
。或者也许某些编程语言或CPU利用比较,只需要1
比较。但在进行渐近分析时,这并不重要。