Skip to content

离散化

什么是?

离散化是一种预处理手段,当原数据很大或含有负数、小数时我们会进行离散化

一般结合线段树等数据结构使用

区别

  • 离线离散化: 一般我们通常考虑数据之间的大小关系进行离散化,所以需要离线
  • 在线离散化: 在某些情况我们不关心数据之间的大小,可以在线离散

模板

下面是离线离散化(在线离散化一般哈希就好了)

cpp
template <typename T>
struct Discrete{
    vector<T> arr;
    Discrete(){}
    Discrete(vector<T> &arr){
        init(arr);
    }
    void init(vector<T> &arr){
        this->arr=arr;
        clear();
    }
    void add(T val){
        arr.push_back(val);
    }
    void clear(){
        sort(arr.begin(),arr.end());
        arr.erase(unique(arr.begin(),arr.end()),arr.end());
    }
    T get(T v){
        return lower_bound(arr.begin(),arr.end(),v)-arr.begin();
    }
};
py
from bisect import bisect_left

def discrete(a):
    a.sort()
    x = [a[i] for i in range(len(a)) if a[i] != a[i - 1]]
    return x

def check_discrete(b,v):
    return bisect_left(b,v)

网站基于vitepress主题open17💙