在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
简介离散化本质上可以看成是一种 哈希 ,其保证数据在哈希以后仍然保持原来的全/偏序关系。 通俗地讲,就是当我们只关心数据的大小关系时,用排名代替原数据进行处理的一种预处理方法。离散化本质上是一种哈希,它在保持原序列大小关系的前提下把其映射成正整数。当原数据很大或含有负数、小数时,难以表示为数组下标,一些算法和数据结构(如BIT)无法运作,这时我们就可以考虑将其离散化。 用来离散化的可以是大整数、浮点数、字符串……等等。 实现C++ 离散化有现成的 STL 算法: 离散化数组将一个数组离散化,并进行查询是比较常用的应用场景:
在完成上述离散化之后可以使用
同样地,我们也可以对
实际演示: 现在我们有序列
排序,去重:
std::unique()的返回值是一个迭代器(对于数组来说就是指针了),它表示去重后容器中不重复序列的最后一个元素的下一个元素。所以可以这样作差求得不重复元素的数量。现在我们有C=[-40, 3, 10, 23, 35]。 再用一个数组,储存A中每个元素在C中的排名:
这样我们就实现了原序列的离散化。得到 因为排序和n次二分查找的复杂度都是 \(\mathcal{O}(n\ log\ n)\) ,所以离散化的复杂度也是 \(\mathcal{O}(n\ log\ n)\) 。完整代码很短:
离散化也不一定要从小到大排序,有时候也需要从大到小。这时在排序和查找时相应地加上 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论