离散化

1. 笔记
对于一组给定的数据,当我们只关心它们的大小关系,而不关心它们具体数值是多少时(尤其是这些数据都很大的时候),可以考虑将它们离散化。例如,将数组a[]={5e15,1e15,3e15,3e15}离散化为a[]={3,1,2,2}。这样可以一定程度上节省时间、空间开销,同时还得到了数据的序关系。
离散化分三个步骤:排序、去重、编号。
2. 代码*
void discretization(T a[],int n)将数组a[]的1-n位离散化,离散化后的a[i]为自然数

/*
备注:
已测试
2018/09/13
*/
template<typename T>
void discretization(T a[],int n)
{
    T *b=new T[n+5];for(int i=1;i<=n;++i)b[i]=a[i];
    sort(b+1,b+n+1);
    int sz=unique(b+1,b+n+1)-b-1;
    for(int i=1;i<=n;++i)a[i]=lower_bound(b+1,b+sz+1,a[i])-b;
    delete[] b;
}
原文地址:https://www.cnblogs.com/maoruimas/p/9643575.html