離散化とその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