数据离散化
定义:离散化,把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。
使用STL离散化步骤:
1、排序
2、去重
3、索引
代码如下:
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; int a[1005], b[1005], sub[1005]; //a[n]是即将被离散化的数组,b[n]是a[n]的副本,sub用于排序去重后提供离散化后的值 int main () { int n; cin >> n; for(int i = 0; i < n; i++) { scanf("%d", &a[i]); sub[i] = a[i]; b[i] = a[i]; } sort(sub, sub + n); int size = unique(sub, sub + n) - sub; //此处为数组去重,并获取去重后的长度 for(int i = 0; i < n; i++) { a[i] = lower_bound(sub, sub + size, a[i]) - sub; //即a[i]为b[i]离散化后对应的值,a[i]中的值是sub[i]中的下标 } for(int i = 0; i < size; i++) { printf("%d%c", sub[i], " "[i == size - 1]); } for(int i = 0; i < n; i++) { printf("%d%c", a[i], " "[i == n - 1]); } return 0; }