当前位置: 首页 > article >正文

离散化算法的二分法应用

我们思考一个问题:其实这里的二分法回归本源也是基于下标映射的原理,只是实现是借助二分的形式。

在排序好的数组中对目标数值进行二分搜索,在 O(logn) 的时间复杂度内找到该数值是整体数据中的第几个。

具体的我们可以如下操作:
  • 数值 10 ---> 二分搜索 10 ---> 有序序列中第 4 位置
  • 数值 3 ---> 二分搜索 3 ---> 有序序列中第 0 位置
  • 数值 8 ---> 二分搜索 8 ---> 有序序列中第 9 位置
  • 数值 9 ---> 二分搜索 9 ---> 有序序列中第 3 位置
  • 数值 4 ---> 二分搜索 4 ---> 有序序列中第 1 位置

复杂度

时间复杂度: O(logn)
主要体现在排序中,其余操作  <= O(logn)

空间复杂度: O(n)
主要体现在用于排序的辅助数组中
不考虑 sort 中使用的空间

代码

对下方代码的注释:
  1. 以 C++ 描述
  2. 以整形数据 int 描述
  3. 默认数据无重复值
  4. 接口名见下
/*** @param odata 原始数据* @param start 起始数值 (一般为0/1)* @return std::vector<int> 经过离散化后的data*/
vector<int> discrete(const vector<int>& odata, int start = 0) ;

 好了,今天的文章分享就到这里了,希望对大家的学习有帮助哦!

http://www.lryc.cn/news/2393638.html

相关文章:

  • IntelliJ IDEA 中进行背景设置
  • Dart语言学习指南「专栏简介」
  • AWS之AI服务
  • Docker 部署项目
  • 半导体厂房设计建造流程、方案和技术要点-江苏泊苏系统集成有限公司
  • (c++)string的模拟实现
  • 一种通用图片红色印章去除的工具设计
  • 企业应用AI对向量数据库选型思考
  • 时序数据库IoTDB安装学习经验分享
  • RapidOCR集成PP-OCRv5_det mobile模型记录
  • 当 Redis 作为缓存使用时,如何保证缓存数据与数据库(或其他服务的数据源)之间的一致性?
  • Dify理论+部署+实战
  • 内网穿透系列五:自建SSH隧道实现内网穿透与端口转发,Docker快速部署
  • 桥梁进行3D建模时的数据采集、存储需求及技术参数
  • Transformer架构技术学习笔记:从理论到实战的完整解析
  • 1、python代码实现与大模型的问答交互
  • CPU服务器的主要功能有哪些?
  • 如何在 Vue.js 中集成 Three.js —— 创建一个旋转的 3D 立方体
  • Java开发经验——阿里巴巴编码规范实践解析6
  • docker常见考点
  • 工业自动化实战:基于 VisionPro 与 C# 的机器视觉 PLC 集成方案
  • C++ —— B/类与对象(中)
  • Java网络编程与Socket安全权限详解
  • AXI协议乱序传输机制解析:提升SoC性能的关键设计
  • Qt实现csv文件按行读取的方式
  • 分库分表后的 ID 生成方案
  • 进行性核上性麻痹健康护理全指南:从症状管理到生活照护
  • openFuyao开源发布,建设多样化算力集群开源软件生态
  • 第四十五节:目标检测与跟踪-Meanshift/Camshift 算法
  • Docker Desktop无法在windows低版本进行安装