使用离散化的一般情况:
1⃣️ 数据的值的范围太大、数值是浮点数,但数据的量并不多
2⃣️ 值的大小不重要,重要的是值之间的大小关系
离散化一般方法:
1⃣️ 排序
2⃣️ 把数值数组映射到“排名数组”
例如,输入的时候,可以把用结构体数值与其下标都记录下来
struct Node{
int val;
//float val;
int pos;
}temp[maxn];
然后根据Node的val值排序,最后计算排名,把排名根据pos的位置来存放
sort(temp,temp+n,cmp);
for(int i=0;i<n;i++){
if(i==0 || temp[i].val != temp[i-1].val)
A[temp[i].pos]=i+1;
else
A[temp[i].pos]=A[temp[i-1].pos];
}
其中A数组就是由temp映射过来的“排名数组”
例如:
temp = [ 5.12 , 3.14 , 3.14 ,1.03 , 6.99]
A = [ 4 , 2 , 2 , 1 , 5]
A数组存放的就是原来数据离散化后的版本