首页 > 学院 > 开发设计 > 正文

离散化处理

2019-11-06 07:56:17
字体:
来源:转载
供稿:网友

有些数据本身很大, 自身无法作为数组的下标保存对应的属性。如果这时只是需要这堆数据的相对属性, 那么可以对其进行离散化处理!离散化:当数据只与它们之间的相对大小有关,而与具体是多少无关时,可以进行离散化。例如91054与52143的逆序对个数相同。

那么就可以把91054表示成52143。

那么离散化如何实现呢?

用另外一个数组b,排序后再用b数组的顺序来对a数组赋值。

可以这样写:

        for(int i=1; i<=n; i++) {

           cin>> b[i].val;

           b[i].id= i;

        }

       sort(b+1, b+n+1, cmp);(对值进行排序)

        for(int i=1; i<=n; i++)  a[b[i].id]= i;

但是逆序对需要重复的数顺序也要重复

如:

1,3,3,5,6表示为1,2,2,3,5

所以要加入一个变量k记录顺序。

        for(int i=1; i<=n; i++) {

           cin>> b[i].val;

           b[i].id= i;

        }

       sort(b+1, b+n+1, cmp);(对值进行排序)

        int k=0;

        for(inti=1; i<=n; i++){

           if(i==1||b[i].val!=b[i-1].val) k++;

           a[b[i].id]= k;

        }


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表