离散化
所谓离散化, 就是把无限空间中有限的个体映射到有限的空间中去,以提高算法的时空效率。
说人话:在不改变数据之间的大小关系的前提下,使数据中的最大值尽可能地小。
举个栗子:
原数据 | 离散化 |
---|---|
1 | 2 |
99999 | 3 |
-999 | 1 |
1 | 2 |
代码实现
int n, a[N], t[N];
// 读入数据
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
t[i] = a[i]; // 复制到 t 中,作为副本
}
// 对数组 t 排序
sort(t + 1, t + 1 + n);
// 去重并获取去重后的数组大小
int l = unique(t + 1, t + 1 + n) - t - 1;
for (int i = 1; i <= n; i++) {
// 映射
a[i] = lower_bound(t + 1, t + 1 + l, a[i]) - t;
}