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

【优化策略】离散化

概念

离散化是算法设计中处理大数据范围时的关键技巧,它将大范围的数据映射到有较小的的离散空间中,同时保持数据的相对关系。

本质:将原始数据映射到紧凑的连续整数空间

数学表示:建立映射函数 f: ℝ → ℤ,满足 x < y ⇒ f(x) < f(y)

典型场景:

坐标范围极大但数据点稀疏(1e9范围仅1e5个点)

需要构建线段树/树状数组但值域过大

数据值本身无意义而只需保留相对大小关系

实现

//方式一:排序 + 去重 + 二分查找(在disc中依次查找a的每个元素,返回在disc中的下标) 
#include <iostream>
#include <algorithm>
using namespace std; 
const int N = 1e5 + 10;
int a[N],n;
int disc[N],pos;//二分找x,返回下标 
int binary_search(int x)
{int left = 1,right = pos;	while(left < right){int mid = (left + right) / 2;if(disc[mid] >= x) right = mid;else left = mid + 1;`}return left
}int main() 
{cin >> n;for(int i=1;i<=n;i++) {cin >> a[i];disc[++pos] = a[i]; //pos在这里起到枚举下标的作用 }sort(disc+1,disc+pos+1); //默认排升序pos = unique(disc+1,disc+pos+1) - (disc+1); //给元素去重 pos在这里接收去重后元素的个数 for(int i=1;i<=n;i++){	printf("%d离散化后的值为%d\n",a[i],binary_search(a[i]));} return 0;
}
//方式二:排序 + 哈希表去重并且记录离散化后的值 
#include <iostream>
#include <algorithm>
#include <unordered_map>
using namespace std; 
const int N = 1e5 + 10;
int a[N],n;
int disc[N],pos;
unordered_map<int,int> mp;int main() 
{cin >> n;for(int i=1;i<=n;i++) {cin >> a[i];disc[++pos] = a[i]; }sort(disc+1,disc+pos+1); //默认排升序int cnt = 0;for(int i=1;i<=pos;i++){int x = disc[i];if(mp.count(x)) continue;mp[x] = ++cnt; //哈希表中储存的是 disc中的各个元素 及其 从小到大分别是第几号 }for(int i=1;i<=n;i++){	printf("%d离散化后的值为%d\n",a[i],mp[a[i]]);} return 0;
}
http://www.xdnf.cn/news/326413.html

相关文章:

  • 力扣92.反转指定范围内的链表、25.k个一组反转链表
  • SpringBoot优雅参数检查
  • java基础-数组
  • AI训练服务器概述
  • 【信息系统项目管理师】法律法规与标准规范——历年考题(2024年-2020年)
  • 【fastadmin开发实战】财务数据快速导入系统(复制导入)
  • 配置Hadoop集群-测试使用
  • C# NX二次开发:曲线和点位相关UFUN函数详解
  • 游戏中心首页
  • LeetCode:对称二叉树
  • 贵州省棒球运动发展中长期规划(2024-2035)·棒球1号位
  • MySQL 联合查询的使用教程
  • Consumer Group的作用是什么?Rebalance的触发条件有哪些? (实现消费者负载均衡;消费者加入/离开、订阅Topic变化等)
  • JAVA中常见队列详解-非线程安全
  • by 组态在化工生产线自动化控制中的应用方案
  • 工具分享:通过滑块拉取CAN报文信号数值自动发送报文
  • Python小酷库系列:Box,更为完善的dict属性化访问扩展库
  • 技术视界 | 青龙机器人训练地形详解(一):如何创建一个地形
  • HTB - Eureka记录
  • 数智管理学(八)
  • 《饶议科学》阅读笔记
  • 【Lanqiao】数位翻转
  • 2021年下半年试题四:论微服务架构及其应用
  • SQL Server 中的 GO 及其与其他数据库的对比
  • Spark-Core(双Value类型)
  • C++对象注册系统(1)实现原理
  • 应用 | AI 自动化某讯会议转录与摘要生成系统
  • Android开发-视图基础
  • Facebook的元宇宙新次元:社交互动如何改变?
  • 2021年CVPR文章【Polygonal Building Segmentation by Frame Field Learning】环境搭建