首页 > 其他分享 >离散化

离散化

时间:2024-03-04 14:33:05浏览次数:16  
标签:begin end val int void 离散 vec

记录
14:29 2024-3-4

目录

1.离散化

如果数据范围太大,但是数据个数并不是很多,可以离散化后,保留了数据的大小关系

问题的范围虽然定义在集合,但是只涉及其中的有限数值,并且与数值的绝对大小无关(只把这些数值作为代表,或只与他们的相对顺序有关)

点击查看代码
void discrete() { //离散化
    // 数据从1开始
    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];
    }
    //a[i] 是输入的数组 排序后 b[m]是无重复的数组
}

int query(int x) { //查询x映射为哪个1~m之间的整数
    return lower_bound(b + 1, b + m + 1, x) - b;
}

使用unique和一种模板写法

点击查看代码
// a输入的数组
vector<int> vec;
void discreate() {
    sort(vec.begin(), vec.end());
    vec.erase(unique(vec.begin(), vec.end()), vec.end());
}

// 查询x映射为哪个数 这里是映射从1开始
int query(int x) {
    return lower_bound(vec.begin(), vec.end(), x) - vec.begin() + 1;
}

// 另一种写法 从leetcode 125双周赛来的
// https://leetcode.cn/contest/biweekly-contest-125/ranking/
// 抄的来源是 @ujimatsu_chiya https://leetcode.cn/u/ujimatsu_chiya/ (叠甲,再有源头我就不知道了)

template <typename T>
struct HashTable {
  vector<T> val;
  void add(T x) { val.push_back(x); }
  void init() {
    sort(all(val));
    val.erase(unique(all(val)), val.end());
  }
  int query(T x) { return lower_bound(ALL(val), x) - val.begin() + 1; }
  T operator[](const int t) const { return val[t - 1]; }
  int size() { return val.size(); }
  void clear(){val.clear();}
};

标签:begin,end,val,int,void,离散,vec
From: https://www.cnblogs.com/57one/p/18051758

相关文章

  • 【基础算法】离散化
    离散化//每日一题#include<bits/stdc++.h>usingnamespacestd;constintN=1000010;intn,m;inta[N],d[N],s[N],t[N];longlongb[N];boolcheck(intx){ memset(b,0,sizeofb); for(inti=1;i<=x;i++) { b[s[i]]+=d[i]; b[t[i]+1]......
  • 离散化
    结构体:intn,i,b[N];structstu{intx,id;booloperator<(stu&stu1)const{returnx<stu1.x;}}s[N];intmain(){scanf("%d",&n);for(inti=1;i<=n;i++){ scanf("%d",&s[i].x); s[i].id=......
  • 离散数学(上)
    第一章命题逻辑的基本概念命题与联结词命题命题:非真即假的陈述句真值:命题的判断结果,取值为真或假简单命题(原子命题):不能再拆分的命题复合命题:简单命题通过联结词联结而成的命题联结词否定联结词(\(\neg\)):当且仅当\(p\)为假时,\(\negp\)为真合取联结词......
  • 离散微积分学习笔记
    后向差分对于函数\(f(x)\)定义等距节点\(x_k=x_0+k\Deltax\)。有:\[\Deltaf(x_k)=f(x_{k})-f(x_{k-1})\]下文简称差分。高阶差分一般来说,\(k\)阶差分的定义如下:\[\Delta^ka_n=\Delta(\Delta^{k-1}a_n)\]易得\(k\)阶差分公式:\[\Delta^ka_n=\sum_......
  • 2.7 离散时间样本训练的统计决策
    马尔可夫模型(离散时间序列样本)指第i时刻的取值依赖于且仅依赖于第i-1时刻的取值的样本串转移率在前一时刻某取值下当前时刻取值的条件概率马尔可夫模型状态转移矩阵用于查找某一状态的转移率离散变量的概率模型估计1、确定概率模型类型2、根据训练样本分别估计各类中......
  • 离散化(Discretization Algorithm)
    简介离散化——把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率,即:在不改变数据相对大小的条件下,对数据进行相应的缩小。离散化本质上可以看成是一种\(哈希\),其保证数据在哈希以后仍然保持原来的全/偏序关系。描述离散化用于处理一些个数不多,但是数......
  • 基础算法(十四)离散化+二分 ---以题为例
    假定有一个无限长的数轴,数轴上每个坐标上的数都是 0。现在,我们首先进行 n 次操作,每次操作将某一位置 x 上的数加 c。接下来,进行 m 次询问,每个询问包含两个整数 l 和 r,你需要求出在区间 [l,r] 之间的所有数的和。输入格式第一行包含两个整数 n 和 m。接下来 ......
  • 【离散数学】第一章 命题逻辑
    第一章命题逻辑真值"地球是行星"这句话(命题)是正确的,我们称它的真值为真,通常记作T或者1;这句话也被称作真命题。"2是无理数"这句话(命题)是错误的的,我们称它的真值为假,通常记作F或者0;这句话也被称作假命题。1.命题的真值一定是唯一的;如果一句话不确定真假或者有时候真有时候假,那这句话......
  • R语言中的模拟过程和离散化:泊松过程和维纳过程
    全文链接:http://tecdat.cn/?p=17303 原文出处:拓端数据部落公众号本文中,我们讨论了一个将Poisson过程与Wiener过程结合在一起的最佳算法的问题。实际上,为了生成泊松过程,我们总是习惯于模拟跳跃之间的持续时间。我们使用给定时间间隔内跳跃的均匀性,该条件取决于跳跃的次数。首先......
  • 离散化
    关于离散化的那些事离散化,本质上就是一种hash,我们需要用到的只是数据的排名而不是数据本身,通过映射的方法把跨度大又疏松的数据转化为跨度小的数据。离散化一般有两种形式,一种是sort+unique,另一种是map。sort+unique首先就是直接用数组排序后去重,将需要用的所有数塞到一个......