离散化

原理

离散化是指把无限空间中的有限个体映射到有限空间中去。

对于映射<key, value>,key的数值范围较大而数据个数较少(即无限空间中的有限个体),如果按照key的数值范围开辟数组保存<key, value>,数组过于稀疏会浪费大量空间;

所以将key离散化,创建两个映射<index, key><index, value>,分别存储key和value,原映射中匹配的key和value在两个新的映射中index相同;

在用key寻找value时,先用二分查找找到key对应的index,然后根据index找到value。

实现

先创建映射<index, key>(vector数组a):排序、去重

sort(a.begin(), a.end());

a.erase(unique(a.begin(), a.end()), a.end());

再使用index作为下标创建映射<index, value>(遍历一遍<key, value>用key找到index,然后将value放入index位置得到<index, value>);

实际使用中更多的是用index作为下标创建前缀和数组或者树状数组等来解决问题(创建前缀和数组和树状数组的操作详见相关章节)。