c语言中离散化,离散化的数据处理

离散化是一种有效降低时间复杂度的数据处理技术,尤其适用于排序等只关注相对大小而非具体数值的场景。通过排序、删除重复元素并编号,将大量数据转化为离散序列,可以显著提升算法效率。例如,对于给定的6个巨大数字,经过离散化处理后,可以将其映射为较小的整数,便于后续计算。在实际操作中,可以利用STL中的sort、unique和lower_bound等函数实现离散化,简化代码并保持结构清晰。
摘要由CSDN通过智能技术生成

离散化的认识

离散化,一种常见的数据处理技巧,可以有效的降低时间复杂度,可以做到将一些低效的算法进行改进,甚至拟造出一些不可能的算法,使其速度大为提高。

离散化的基本思想就是将一些巨大的范围内,挑选出要用的值,再进行处理。

离散化的处理

注:对数据进行离散化处理的前提是这些数据只于他们的相对大小有关,而不与其具体数值有关,例如排序等。

进行离散化的处理其实很简单:为所有巨大的数据从小到大进行编号。

例如有6个数:

66666 66 666 666666 6 6666

他们排序后得:6<66<666<6666<66666<666666

所以这六个数分别表示为:5 2 3 6 1 4(即这几个数在排序后所得结果得位置)

利用STL对数据进行离散化处理

思路:利用sort排序,后删除重复元素,引出其代表的值(即标序号)。

设序列a[n]为待进行处理的序列,b[n]为其副本。

sort(sub_a,sub_a+n);

int size=unique(sub_a,sub_a+n)-sub_a;//size为离散化后元素个数

for(i=0;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离散化大大减少了代码量且结构相当清晰。

以上为“数据中的离散化”的内容,如有不足望大家指出,例题日后会专门水一篇文章的!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值