zoukankan      html  css  js  c++  java
  • 数据离散化处理

    有些数据本身很大,自身无法作为数组的下标保存对应的属性。

    如果这时只是需要这堆数据的相对属性, 那么可以对其进行离散化处理!

    离散化:当数据只与它们之间的相对大小有关,而与具体是多少无关时,可以进行离散化。

    使用STL算法离散化: 思路:先排序,再删除重复元素,然后就是索引元素离散化后对应的值。 假定待离散化的序列为a[n],b[n]是序列a[n]的一个副本,则对应以上三步为:

     

    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include <string>
    #include <cstring>
    #include <cmath>
    #include <vector>
    #include <queue>
    #include <algorithm>
    #include <map>
    using namespace std;
    
    int X[10] = {1234567, 1234567, 123456789,12345678, 123456};
    
    int a[10] = {1234567, 1234567, 123456789, 12345678, 123456};
    
    int main()     ////// n = 5
    {
        sort(X, X+5);
        int size = unique(X, X+5)-X;
        for(int i = 0; i < 5; i++) a[i] = lower_bound(X, X+size, a[i])-X+1;
        
        for(int i = 0; i < 5; i++) printf("%d
    ", a[i]);
        system("pause");
    }
    View Code

     

     

    对于第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离散化大大减少了代码量且结构相当清晰。

  • 相关阅读:
    国内的pythoner强烈建议使用豆瓣的pypi源 zz
    python3.x中的urllib模块
    idcheck.py
    17、关于hibernate的N+1问题
    16、【转】Hibernate 原汁原味的四种抓取策略
    1、SSH的整合---->将Struts2整合到Spring中
    1、利用json2html.js处理json数据
    1、Ubuntu14.04使用root登陆帐户
    2、CentOS中修改yum源
    1、在CentOS上安装Java JDK的步骤
  • 原文地址:https://www.cnblogs.com/Buck-Meister/p/3264715.html
Copyright © 2011-2022 走看看