離散化
いわゆる離散化は、アルゴリズムの時空間効率を改善するために、無限空間内の有限の個人を有限空間にマッピングすることです。
言葉で言えば、データ間のサイズの関係を変更せずに、データの最大値をできるだけ小さくします。
栗を与える:
生データ | 離散化 |
---|---|
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;
}