美文网首页
数学技巧与逻辑应用完美结合的二分查找

数学技巧与逻辑应用完美结合的二分查找

作者: lifanxin | 来源:发表于2018-09-26 19:40 被阅读0次

引言

二分查找算法最典型的应用莫过于猜数,假如你的朋友要你猜中他心里想的一个数字,这个数字在0-99之间,你每猜一次,他都会告诉你是否猜中亦或是数字偏大或偏小。那么你会怎样猜测呢?

从0猜到99,猜100次
99猜到0呢,还是100次

666

当然最省事的办法就是:先猜50,如果偏大;再猜25,还是偏大;再猜12,还是偏大;再猜6,还是偏大;再猜3,还是偏大;再猜1,还是偏大;那么就只能是0了!这时你可能会说要是一开始猜0早就结束了,不过你就确定你的好友不会想个99吗!

算法分析

从上面我们可以看出,采用二分法猜测,在最坏的情况我们会猜测log_2100次即最多7次,所以算法复杂度为O(log_2^n);而我们盲目猜测时最坏的结果回达到100次,所以算法复杂度为O(n);当然了你也许会说100次我还承受的了,那么我们来看看这个数1125899906842620,如果从0开始,估计你整个青春都浪费了,而采用二分法呢?我们只需要50次,因为这个数等于2^50方。

Python代码

# -*- coding : utf-8 -*-


def binary_search(array, item):
    low = 0   # 数组下标以0开始计算
    high = len(array) - 1  # 计算数组高位位置

while low <= high:  # 只要范围没有缩小到只剩一个元素
    mid = int((low + high) / 2)  # 二分法精髓,从最中间开始查找;int 向下取整
    guess = array[mid]
    if guess == item:
        return mid
    if guess > item:
        high = mid - 1
    else:
        low = mid + 1
return "Not Found"


if __name__ == "__main__":
    test_array = [1, 3, 5, 7, 9, 11, 13, 15, 17, 21]
    print("寻找1的位置:\n", binary_search(test_array, 1))
    print("寻找14的位置:\n", binary_search(test_array, 14))

相关文章

  • 数学技巧与逻辑应用完美结合的二分查找

    引言 二分查找算法最典型的应用莫过于猜数,假如你的朋友要你猜中他心里想的一个数字,这个数字在0-99之间,你每猜一...

  • 5.8面试某公司

    一面聊下项目做法,为何要将CF与LR结合?推导逻辑回归;二分查找;shell统计词频cat test.txt | ...

  • python二分查找算法

    文章概述 二分查找法介绍 简单查找与二分查找对比 二分查找  二分查找算法主要思想:在有序列表中查找指定元素,先从...

  • 算法之二分查找

    二分查找 二分查找是著名、高效并有应用广泛的查找算法。 二分常规实现 1.循环实现 下面我用python语言实现循...

  • 二分搜索算法 Go

    说明 二分查找的数组必须是有序的,二分查找的优点是查找操作仅需要O(lgN)时间。 逻辑 首先传入的数组必须是有序...

  • 二分查找

    学习极客时间的数据结构与算法之美的专栏,记录笔记。 1 二分查找应用场景的局限性 (1)二分查找依赖的是顺序表结构...

  • 2.3 二分查找的递归与非递归实现

    Chapter2: 时间复杂度分析、递归、查找与排序 3. 二分查找的递归与非递归实现 二分查找即折半查找,为查找...

  • 2.3 二分查找的递归与非递归实现

    Chapter2: 时间复杂度分析、递归、查找与排序 3. 二分查找的递归与非递归实现 二分查找即折半查找,为查找...

  • 情境与数学的完美结合。

    皮亚杰的发生认识论认为,人能够积极理性的学习,即使是儿童。儿童具有主观能动性,他们在自身经验的基础上,在与环境与他...

  • 二分查找的两种实现 by Python

    时间复杂度:O(logn)二分查找应用场景的局限性:1.二分查找依赖的是顺序表结构,简单的说就是数组;2.二分查找...

网友评论

      本文标题:数学技巧与逻辑应用完美结合的二分查找

      本文链接:https://www.haomeiwen.com/subject/liyjoftx.html