我刚开始学习一些基本算法,但二分查找算法有些令我困惑。
据我所知,二分查找的最大时间复杂度为O(log(n)),其中log以2为底。
然而,当对非2的幂次方的N值使用公式时,会得到一个非整数值。
我困惑的是:如果最终得到3.3这样的值,那么最多需要3步还是4步。
当使用n = 10的数组时,你会得到3.3的值。话虽如此,我手动计算了步数,得到了4,因此我认为应该向上取整。
但在我的教科书中,它说当n = 10000时,至多需要13个步骤。将其代入上述对数公式后,我们得到13.2,也就是说在这种情况下我们向下取整。
我已经尝试用不同大小的数组进行二分查找,并发现了必须向下取整才能得到教科书答案的情况,也发现了必须向上取整的情况。
我不确定何时向上取整或向下取整,或者我是否犯了其他错误。
如果有人能给我提供一个示例,请使用大小为100000的数组。因为在书中说最多16次,但当我手动将100000减半直到得到1时,我得到了17次。
预先感谢!
据我所知,二分查找的最大时间复杂度为O(log(n)),其中log以2为底。
然而,当对非2的幂次方的N值使用公式时,会得到一个非整数值。
我困惑的是:如果最终得到3.3这样的值,那么最多需要3步还是4步。
当使用n = 10的数组时,你会得到3.3的值。话虽如此,我手动计算了步数,得到了4,因此我认为应该向上取整。
但在我的教科书中,它说当n = 10000时,至多需要13个步骤。将其代入上述对数公式后,我们得到13.2,也就是说在这种情况下我们向下取整。
我已经尝试用不同大小的数组进行二分查找,并发现了必须向下取整才能得到教科书答案的情况,也发现了必须向上取整的情况。
我不确定何时向上取整或向下取整,或者我是否犯了其他错误。
如果有人能给我提供一个示例,请使用大小为100000的数组。因为在书中说最多16次,但当我手动将100000减半直到得到1时,我得到了17次。
预先感谢!