二分搜索binary search和贪婪算法

2023-05-16

二分搜索binary search


定义:二分搜索也称折半搜索,是一种在有序数组中查找某一特定元素的搜索算法。

运用前提:必须是排好序的。
输入并不一定是数组,也可能是给定一个区间和终止的位置。

优点:、

  • 二分搜索也叫对数搜索,其时间复杂度为O(log n),是一种非常高效的搜索。

缺点:

  • 要求待查找的数组或者区间是排好序的
  • 如果要求对数组进行动态删除和插入操作,并完成查找,平均复杂度会变为O(n)
  1. 采取自平衡二叉查找树
  2. 可在O(nlogn)的时间内用给定的数据构建出一颗二叉查找树。
  3. 可在O(logn)的时间内对数据进行搜索
  4. 可在O(logn)的时间内完成插入和删除的操作

当:输入的数组或区间是有序的,且不会常变动,要求从中找出一个满足条件的元素->二分搜索binary

基本结题模板
递归:
  优点是简洁
  缺点是执行消耗大
  

  int binary_search(int nums[],int target,int low,int high)
  {
     if(low>high) return -1;
     int middle = (low+high)/2;
     if(nums[middle]== target)
     return middle;
     
     if(nums[middle]> target)
     {
        return binary_search(nums,target,low,middle-1);
     }else
     {
        return binary_search(nums,target,middle+1,high);
     }
  }


  三个关键点

  • 计算middle下标时,不能简单地用(low+high)/2 这样可能会导致溢出
  • 取左半边[low,middle-1]
  • 取右半边[middle+1,high] 
  • 我们确定了middle点是不是我们要找的点,
  • 因此没有必要再把它加入左右半边了
  • 对于一个长度为奇数的数组,按照low+(high-low)/2来计算的话,middle就是正中间的那位。
  • 对于偶数个的数组,middle就是正中间那个

核心思想:

  1. 确定搜索的范围和区间
  2. 取中间的数判断是否满足条件
  3. 如果不满住,判断应该往那个半边继续进行搜索。
 int binary_search(int nums[],int target,int low,int high)
 {
     while(low<=high)
     {
        int middle = low+(high-low)/2;
        if(nums[middle]== target)
        return middle;
        
        if(nums[middle]>target)
        {
            high = middle-1;
        }else
        {
            low = middle+1;
        }
     }
     return -1;
 }

找确定的边界


贪婪算法:  

Greedy 总是做出在当前看来最好的选择

不从整体的角度去考虑,仅对局部的最优解感兴趣
什么问题适用贪婪算法?
只有当哪些局部最优策略能产生全局最优策略的时候。

背包问题:
有三种不同的贪婪策略
1、选取价值最大的物品
2、选取重量最小的物品
3、选取价值/重量比最大的物品

贪婪物品有   A  B  C
重量分别是: 25,10,10
价值分别是:100,80,80
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二分搜索binary search和贪婪算法 的相关文章

  • 您如何在网络上搜索与编程相关的信息? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何将 std::map 输出到二进制文件?

    我怎样才能输出一个std map到二进制文件 地图声明如下所示 map
  • 奇怪的 0x0D 被添加到我的二进制文件中

    我有这个奇怪的问题 我将 16 个字符写入一个二进制文件 然后写入 3 个整数 但是当我使用某些二进制文件查看器打开文件时 我看到添加了一个额外的字节 等于0x0D 这是我的代码 for i 0 i lt 16 i if i lt strl
  • 如何在我的网站中创建全局搜索[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何在我的网站中创建全局搜索 该网站是内部网站 无法在网上使用 我无法使用 Google 搜索来实现此目的 我的信息全部存储在不同的
  • 将搜索栏从 magento 主页的标题中移动

    我是 magento 的新手 我想将搜索栏从标题移动到主页的中间位置 以便它仅显示在主页上 我在 magento 论坛上阅读了许多相关答案 但所有人都在尝试编辑 box css 中的 mini search 元素 但不幸的是我在此文件中没有
  • 将二进制文件转换为图像

    我需要找到一种将二进制文件转换为图像的快速方法 二进制文件由 N 个NN 矩阵 我想将 0 与一种颜色关联 将 1 与另一种颜色关联 我需要对超过 1000 个二进制文件执行此操作 如果可能的话 我想避免使用 MatLab 有没有任何工具
  • 如何为高流量网络应用程序实现“保存搜索”功能?

    我想知道可以在 eBay 等大型网络应用程序上找到的 保存的搜索 功能 您可以做的就是保存搜索 例如 宾得镜头 50mm 1 4 每当有人出售符合搜索条件的新优质标准快速宾得镜头时 您都会收到通知 对我来说 实现此类功能并不是一件简单的事情
  • 生成 xcframework 库时 xcodebuild 错误“不支持具有多个平台的二进制文件”

    我正在尝试从 MyFramework framework 文件生成 xcframework 文件 我正在运行以下命令 xcodebuild create xcframework framework MyFramework framework
  • 实时搜索错误

    我正在获取用户偏好和角色 一切正常并且数据接收正确 默认值放置在单选按钮上以突出显示用户当前拥有的选项 我正在使用 Antd Design Table 组件 问题 当我将用户首选项更改为打印文档时 它确实通过数据库的状态成功更改了它 但是现
  • 替代位置基础系统(十六进制、八进制、二进制)如何工作?如何将它们转换为十进制?

    我以前在编程课上没有学过这一点 但现在我需要知道它 有哪些学习这些数字以及如何转换它们的好资源 我几乎会像记住乘法表一样记住这些 在我们日常的十进制系统中 基数或radix http en wikipedia org wiki Radix
  • Android 搜索界面未提交查询

    我按照官方教程实现了一个搜索界面 搜索小部件 搜索界面 http developer android com training search setup html密切 一切看起来都不错 但我无法提交搜索查询 当我单击键盘上的 发送 按钮时
  • 测试由于浮点限制而导致的舍入误差

    我最近了解到浮点的主要限制之一 事实上 某些数字无法以二进制正确表示 因此可能给出的答案对于您的目的来说不够准确 知道round 2 675 2 and round 2 665 2 两者相等2 67我尝试编写一些代码来给出具有此属性的数字列
  • 如何使用 Ansible when 条件在文件中搜索字符串

    我有一个变量中用 n 分隔的搜索字符串列表listofips 我想在文件中搜索该字符串hello csv在我的下面playbook dir 我可能遇到一些语法问题 我不确定 但下面是我尝试过的 set fact listofips 10 0
  • 自定义“可搜索”搜索字段 SwiftUI iOS 15

    When using the new searchable modifier in SwiftUI on iOS 15 I have no way to customize the Search Bar appearance Specifi
  • 正在搜索 Mercurial 存储库 (TortoiseHG)?

    有什么方法可以输入特定的文件名 例如 xyz txt 并使用 TortoiseHG 在 Mercurial 存储库中搜索该文件的任何签入 如果没有 为什么不呢 这不就是版本控制的用途吗 在 Hg Repository Explorer 窗口
  • 如何使用 django 过滤器 icontains 获取多个字段

    我正在尝试将查询搜索与所有模型字段进行比较 但我不知道如何在多个字段中执行此操作 这是我的代码 expense Expense objects filter user request user id order by date q requ
  • 使用 IE11 的工作程序使用 multipart/form-data 发送二进制数据

    我正在尝试发送multipart form data来自 IE 的工作人员 我已经使用 Chrome Firefox Safari 完成了此操作formData对象 不支持IE 我需要一个手动的 我发送的二进制数据是 crypto js 加
  • 在一个后台为MYSQL的网站上集成搜索

    我有一个位置搜索website http www jammulinks com对于一个城市 我们首先收集该城市所有可能类别的数据 如学校 学院 百货商店等 并将其信息存储在单独的表中 因为每个条目除了名称 地址和电话号码外都有不同的详细信息
  • 在数据库中搜索时忽略空文本框

    此代码能够搜索数据并将其加载到DataGridView基于搜索表单文本框中提供的值 如果我将任何文本框留空 则不会有搜索结果 因为 SQL 查询是用 AND 组合的 如何在搜索 从 SQL 查询或 C 代码 时忽略空文本框 private
  • 谷歌如何通过图像进行搜索?

    最近 谷歌推出了图片搜索的新功能 即通过图片搜索 我们可以通过在谷歌搜索框中上传图片来搜索其他图片 这怎么可能 http images google com http images google com Look at WP 基于内容的图像

随机推荐