首页 > 其他分享 >离散化

离散化

时间:2023-11-10 23:56:57浏览次数:38  
标签:11 arr int 离散 数组 sorted 80

背景引入

对于一个数字序列,如果我们只关心他们之间的相对大小,而不关心具体数值,并且直接使用原数值会对我们的解决方案产生影响,此时我们采用离散化

具体步骤

即将一个原数组映射到另一个等大的数组中,并且两个数组数字之间的大小关系不变
如:原序列= [ 12 4 80 7 6 11 4 5*10e10] 可以映射成: [5 1 6 3 2 4 1 7]

代码详解

#include <algorithm>
#include <iostream>
using namespace std;
bool cmp(int a, int b) {
	return a < b;
}
int main() {
	int n = 8;
	int arr[] = {12, 4, 80, 7, 6, 11, 4, int(5 * 10e10)};
	int sorted[n];
	copy(arr, arr + n, sorted);
	sort(sorted, sorted + n, cmp);
	for (int i = 0; i < n; i++) {
		arr[i] = lower_bound(sorted, sorted + n, arr[i]) - sorted + 1;
	}
	return 0;
}

解释

在上述代码中,我们先构建了一个原数组的排序,即sorted = [4 4 6 7 11 12 80 5*10e10]
通过代码

for (int i = 0; i < n; i++) {
		arr[i] = lower_bound(sorted, sorted + n, arr[i]) - sorted + 1;
	}

我们先获得的arr[i]在sorted中的第一个不大于它的迭代器(指针),比如对于arr[i]=7,先返回指向sorted中的7的指针,减去sorted就会得到7在sorted中的位置n,即*(sorted+n) = 7,再加一就得到是第几个数字,这样就可以把原数组映射到一个连续且等于其长度的数组中了

标签:11,arr,int,离散,数组,sorted,80
From: https://www.cnblogs.com/C-qian/p/17825371.html

相关文章

  • 离散数学 第一章 命题逻辑 1-3命题公式与翻译
    前面已经提到,不包含任何联结词的命题叫做原子命题,至少包含一个联结词的命题称作复合命题。设p和q是任意两个命题,则┓p,p∨q,(p∧q)∨(p→q),p«(q∨┓p)等都是复合命题。若p和q是命题变元,则上述各式均称作命题公式。p和q称作命题公式的分量。必须注意:命题公式是没有真假值的,仅当在一个公式中......
  • 离散数学 第一章 命题逻辑 1-2 联结词
    在自然语言中,常常使用“或”,“与”,“但是”等一些联结词,对于这种联结词的使用,一般没有很严格的定义,因此有时显得不很确切。在数理逻辑中,复合命题是由原子命题与逻辑联结词组合而成,联结词是复合命题中的重要组成部分,为了便于书写和进行推演,必须对联结词作出明确规定并符号化。下面介......
  • 离散数学 第一篇 数理逻辑
    第一篇数理逻辑    逻辑学是一门研究思维形式及思维规律的科学。逻辑规律就是客观事物在人的主观意识中的反映。逻辑学分为辨证逻辑与形式逻辑两种,前者是以辨证法认识论的世界观为基础的逻辑学,而后者主要是对思维的形式结构和规律进行研究的类似于语法的一门工具性学科。......
  • 离散数学蕴含式的问题
    如何理解数理逻辑中的蕴含?P→Q它表示自然语言的“如果…,则…”这种假言判断的,如果P为真命题,Q也为真命题时,P→Q是真命题,当P为真命题,而Q为假命题时,P→Q是一个假命题。比如张三说,“如果明天天不下雨(P),那么他去你家玩(Q)”,如果第二天天不下雨,他去了你家,他说了真话(P→Q为真),如果天不......
  • 离散数学 第一章 命题逻辑 1-1 命题及其表示法
    在数理逻辑中,为了表达概念,陈述理论和规则,常常需要应用语言进行描述,但是日常使用的自然语言进行描述,往往叙述时不够确切,也易产生二义性,因此就需要引入一种目标语言,这种目标语言和一些公式符号,就形成了数理逻辑的形式符号体系。所谓目标语言就是表达判断的一些语言的汇集,而判断就是对......
  • 《离散数学》双语专业词汇表 名词术语中英文索引
    《离散数学》双语专业词汇表set:集合subset:子集element,member:成员,元素well-defined:良定,完全确定brace:花括号representation:表示sensible:有意义的rationalnumber:有理数emptyset:空集Venndiagram:文氏图contain(in):包含(于)universalset:全集finite(infinite)set:有限(无限)集......
  • 离散化
    AcWing笔记--离散化前言所谓离散化,是将给定的有序序列通过二分查找,将其对应的值映射到其对应的序号的过程。如给定一个数组元素[5,10,55,96,1055464,546467979],显然这是一个给定长度的有序数组。对于这样一个元素确定的有序数组,离散化之后,5映射为1也就是其序号(映射为0......
  • MATLAB 使用离散数据点实现三维曲面插值
    依靠若干离散点实现三维曲面插值是工程应用中的常见问题,也是数据处理工作的常见需求。MATLAB实现上述功能主要依靠 griddata函数,该函数支持基于三角形的三次插值(仅支持内插值,估计是一种保形插值)和双调和样条插值(支持外插值)。案例数据如下图所示:案例数据空间分布如下:案例代......
  • 计算离散点的边界 MATLAB计算多维凸包
    无论是进行回归、拟合还是深度学习,总要将总体数据集划分为训练样本集和测试样本集。然而,一般情况下,测试集位于训练集“所覆盖的范围之内”时(如下图所示,红色星号表示训练样本集所在位置,蓝色圆点表示测试样本集所在位置),测试效果较好,测试结果也更具合理性。但是如何验证测试集是否在......
  • 关于离散函数的积分是否连续这件事的思考
    以前都是通过:“积分函数一定可导→可导一定连续”来记忆的后来想,0→t积分和0→t+Δt积分,当Δt→0时,如果被积函数在这里出现间断点,为啥积分还能连续?通过数形结合可以看出,积分就是微分*Δt这个小矩形块的面积,尽管微分可能够大,但是由于Δt够小,所以相当于面积为0,即积分为0,故积分函数......