离散化及其C++代码实现

离散化

所谓离散化, 就是把无限空间中有限的个体映射到有限的空间中去,以提高算法的时空效率。

说人话:在不改变数据之间的大小关系的前提下,使数据中的最大值尽可能地小。

举个栗子:

原数据 离散化
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;
}

猜你喜欢

转载自blog.csdn.net/qq_45934120/article/details/108027929
今日推荐