数据离散化模板(用STL实现)
2017-08-10 20:15
190 查看
最近在练习一道提的时候,数据比较大,总过不了,后来了解得需要用离散化,对视抛弃没有用到数据只存取有用的数据,并且用简单好记的东西去存储,例如:有些数据本身很大, 自身无法作为数组的下标保存对应的属性。如果这时只是需要这堆数据的相对属性, 那么可以对其进行离散化处理!离散化:当数据只与它们之间的相对大小有关,而与具体是多少无关时,可以进行离散化。例如9 1 0 5 4 与 5 2 1 4 3 的逆序对个数相同。设有4个数:1234567、123456789、12345678、123456排序:123456<1234567<12345678<123456789=> 1 < 2 < 3 < 4那么这4个数可以表示成:2、4、3、1使用STL算法离散化:思路:先排序,再删除重复元素,然后就是索引元素离散化后对应的值。假定待离散化的序列为a,stu_a是序列a的一个副本,则对应以上三步为:
sort(sub_a,sub_a+n); int size=unique(sub_a,sub_a+n)-sub_a;//size为离散化后元素个数 for(i=0;i<n;i++) a[i]=lower_bound(sub_a,sub_a+size,a[i])-sub_a + 1;//k为b[i]经离散化后对应的值对于第3步,若离散化后序列为0, 1, 2, ..., size - 1则用lower_bound,从1, 2, 3, ..., size则用upper_bound,其中lower_bound返回第1个不小于b[i]的值的指针,而upper_bound返回第1个大于b[i]的值的指针,当然在这个题中也可以用lower_bound然后再加1得到与upper_bound相同结果,两者都是针对以排好序列。使用STL离散化大大减少了代码量且结构相当清晰。
相关文章推荐
- SpringMVC结合freemarker模板回显数据的实现
- 数据结构图文解析之:栈的简介及C++模板实现
- 数据结构之链表 (C++类模板实现)
- hash表 拉链法 仿sgi stl 非模板简单实现
- ASP.NET 2.0 中实现模板中的数据绑定系列
- ASP.NET 2.0 中实现模板中的数据绑定系列(2)
- ASP.NET 2.0中实现模板中的数据绑定
- ASP.NET 2.0 中实现模板中的数据绑定系列(2)
- 可以插入重复数据的AVL树模板实现
- 基于jQuery的AJAX和JSON实现纯html数据模板
- JavaScript与JSON数据交互实现的基于HTML的模板
- 进阶篇_STL详解(函数模板特化,类模板特化,用模板实现自己的通用算法)
- C#实现Excel模板导出和从Excel导入数据
- 数据结构图文解析之:AVL树详解及C++模板实现
- 数据结构图文解析之:二叉堆详解及C++模板实现
- ASP.NET 2.0 中实现模板中的数据绑定系列(2)
- POJ 2833 求平均数。 模板:STL实现大根堆和小根堆
- ASP.NET 2.0 中实现模板中的数据绑定系列
- 数据模板的JScript.net实现
- ASP.NET 2.0 中实现模板中的数据绑定系列(2)