对具有n个元素的有序数组进行二分法查找,要分析的比较次数,可以使用画二叉判定树的方法来分析。该二叉判定树的高度为[log2(n)]+1层,此即为二分查找的最多比较次数,比如:n=1000,则最多比较[log2(1000)]+1=9+1=10次。
如果要计算平均的比较次数,则需要对二叉判定树中的每个节点进行分析,处于第一层的比较1次,第二层的比较2次,第三层比较3次,依次类推……把各个节点的比较次数累加,再处于节点数(元素个数)即为平均比较次数,这里假设查找是在等概率的情况下进行的。
举个例子:有9个元素的有序数组,对每个元素按1,2,3...8,9进行编号,则其二叉判定树如下:
图中可以看出,如果要找的元素处在第5个位置,则只要1次比较即可找到,若找第9个元素,则需要4次比较,算法分别比较了第5,7,8,9等4个元素。所以,平均的比较次数大概如下:
这样分析,能看懂吗?希望能帮到你!
“精确度为a”的含义是:“近似值与精确值之差(即误差)不大于a”。这个意义在二分法中也同样适合。
举个例子容易说清楚:设a的精确值为1.21456,用四舍五入的方式取其精确度为0.1的近似值为1.2,在这种规则下,近似值1.2的含义是指精确值在区间[1.15,1.25)内,这可以保证近似值与精确值之差(即误差)不大于0.1;在二分法中,如果我们已经把可能取值的区间缩小到了(1.13,1.22),此时区间长度为0.090.1,所以,在此区间内任意取一个值作为近似值,均可保证误差不大于0.1(事实上误差不大于0.9),比如取1.14为近似值,它与精确值之间的误差为0.0745126,但如果对这个1.14再进一步作四舍五入处理得1.1那么其误差就会超出0.1(误差为0.11456)。在这个例子中,按我们以往的习惯把“精确到0.1”理解为精确到小数点十分位作有效数字,那么(1.13,1.22)还不够小,因为小数点十分位的有效数字是1还是2我们还无法确定。如果一定要按习惯保留到小数点十分位,还得再作一次二分区间。但在“精确度为0.1”的条件下,这是没有必要的,只是我们不能按习惯再作四舍五入。
在此产生疑惑的原因是:对以往近似计算的规则只从操作层面理解,没有在理论的、实质性的层面上进行追问所致。数学素质教育与应试教育的区别也可以从这个简单的例子中进行对比。(只完成操作层面的理解并不影响相应的应试分数,但会影响对产生新情况下的相关问题的理解)
一共9个数,
取最中间的数(第5个),一看13,比19小,
那么再取 第5个 到 第9个数的中间。 一看是17,比19小
取第7到第9个数的中间,一看是19, ok了,查到了。
一共用了3次。
想想李咏玩的那个猜价格, 大了,小了。。。 这个就是二分法,
L=b-a是区间长度,e是要求达到的精度
次数 n=ceil[log2(L/e)] 其中ceil[]是正向取整数的意思
...原来是10个数,道理相同。
与初始长度有关,如果初始长度为1,则n次后长度为1/2^n,
4次后长度为1/16=0.0625,
精确度远大于0.1了。
要看你从多大规模2分了
二分次数=O(logN)如果规模是1000,就需要log(1000×10)次(底数为2)