数据离散化是一个非常重要的思想。

为什么要离散化?

当以权值为下标的时候,有时候值太大,存不下。 所以把要离散化的每一个数组里面的数映射到另一个值小一点的数组里面去。

打个比方,某个题目告诉你有104个数,每个数大小不超过240,要你对这些数进行操作,你开longlong存不下,开int又会溢出,那怎么办呢?离散化!打个比方,某个题目告诉你有10^4个数,每个数大小不超过2^{40},要你对这些数进行操作, 你开long long 存不下,开int 又会溢出,那怎么办呢?离散化!打个比方,某个题目告诉你有104个数,每个数大小不超过240,要你对这些数进行操作,你开longlong存不下,开int又会溢出,那怎么办呢?离散化!
我们来看一下定义:离散化,把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。

通俗的说,离散化是在不改变数据相对大小的条件下,对数据进行相应的缩小。
例如:

原数据:12,9999,9000900,150;处理后:1,3,4,2;

原数据:{100,200},{20,50000},{1,400};处理后:{3,4},{2,6},{1,5};

但是离散化仅适用于只关注元素之间的大小关系而不关注元素本身的值!


// 离散化
void discrete() {sort(a + 1, a + n + 1);for (int i = 1; i <= n; i++) // 也可用STL中的unique函数if (i == 1 || a[i] != a[i - 1])b[++m] = a[i];
}// 离散化后,查询x映射为哪个1~m之间的整数
void query(int x) {return lower_bound(b + 1, b + m + 1, x) - b;
}

『ACM-算法-离散化』信息竞赛进阶指南--离散化相关推荐

  1. 『ACM--算法--KMP』信息竞赛进阶指南--KMP算法(模板)

    简介: KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特-莫里斯-普拉特操作(简称KMP算法).KMP算法的核心是利用匹 ...

  2. 『ACM-数据结构』信息竞赛进阶指南--线段树

    我们主要是讲代码实现,不是讲基本原理! 什么是线段树? 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点. 使用线段树可以快速的查找某一个节点 ...

  3. 『ACM-算法-数据结构』信息竞赛进阶指南--树状数组 (模板)

    写在前面: 我们是主要是讲算法模板,即实现的代码,并不讲实现的原理 什么是树状数组? 树状数组(Binary Indexed Tree(B.I.T), Fenwick Tree)是一个查询和修改复杂度 ...

  4. 『ACM-算法-二分法』信息竞赛进阶指南--二分法

    写在前面:我们主要还是分享算法的模板,而不是去刨析算法的原理! 定义: 二分答案是指在答案具有单调性的前提下,利用二分的思想枚举答案,将求解问题转化为验证结果. 流程: 首先需要估计答案的上下界,然后 ...

  5. 『ACM-算法-Hash算法』信息竞赛进阶指南--字符串哈希

    字符串hash主要应用在: 寻找长度为n的主串S中的匹配串T(长度为m)出现的位置或次数的问题属于字符串匹配问题. 类似的还有KMP,我也有讲解. 原理: 将字符串中的每一个字母都看做是一个数字(例: ...

  6. 『ACM-算法-ST算法』信息竞赛进阶指南--区间最值问题的ST算法

    借助倍增和动态规划可以实现O(1)的时间复杂度的查询 预处理: ①区间DP 转移方程 f[i][j] = min(MAX同理)(f[i][j - 1],f[i + ][j - 1]) f[i][j]表 ...

  7. 『ACM--数据结构--字典树』信息竞赛进阶指南--Tire树

    主要不是讲实现,是分享代码! 啥是字典树: Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎 ...

  8. 『ACM-算法-枚举法』信息竞赛进阶指南--枚举方法

    你以为枚举是一个一个的找? 还真是 你以为枚举都是for循环? 还真是 但你真的会枚举吗?组合型枚举,指数型枚举,排列型枚举?难道你只会线形枚举? 你可太菜了! // 递归实现指数型枚举 vector ...

  9. 信息竞赛进阶指南--搜索相关(模板)

    ACM常用模板合集 // 深度优先遍历框架 void dfs(int x) {v[x] = 1;for (int i = head[x]; i; i = next[i]) {int y = ver[i ...

最新文章

  1. hbase2.0.0-安装部署
  2. PL SQL笔记(三)
  3. Markdown 编辑器的使用记录 (Typora)
  4. redis中的quicklist
  5. 非常好用的网站状态监控服务:SiteUpTime,监控你的Http/Mail/Ping etc.
  6. 当当网新用户注册界面——JS代码
  7. AS3.0的int uint Number的使用原则
  8. 【Transformer】ACMix:On the Integration of Self-Attention and Convolution
  9. pause容器作用_Kubernetes学习之pause容器
  10. c#进阶(6)—— 网络通信基础知识
  11. python 血缘进程共享数据
  12. 什么是冬至?冬至的由来?
  13. Spring中的ApplicationContextAware使用
  14. 函数指针还是c++虚函数_C和C++哪个效率更高?
  15. Scatter-gather DMA 与 block DMA
  16. linux编写脚本的基本方法
  17. java list随机取_java list随机抽取元素的案例
  18. 气象大数据与预报准确率
  19. 纯HTML+CSS+js实现大型企业站小米商城官网之注册页面
  20. 自动化测试工具 Java等

热门文章

  1. Android开发之无bug滑动删除源码(非第三方库)
  2. android中服务播放音乐,为什么我们需要Android中的服务?音乐播放也可以通过后台线程完成...
  3. mailcore(一)
  4. 怎么将pdf转换成word
  5. Python--Redis实战:第三章:Redis命令:第七节:其他命令
  6. 开发中常见的十种对缓存的错误使用
  7. Centos6.9安装部署nginx服务器
  8. spring源代码系列(一)sring源代码编译 spring源代码下载 spring源代码阅读
  9. json格式数据,将数据库中查询的结果转换为json, 然后调用接口的方式返回json(方式一)...
  10. Linux下百度云盘报 获取bdstoken失败