zoukankan      html  css  js  c++  java
  • 【学习笔记】理解离散化

    一、离散化是一种工具,可以优化时间空间复杂度。

    二、基本思想:在众多可能的情况中只考虑我需要的值。

    三、使用的情况:

    (1)

    将连续的变量变成一个个的值,变成离散的变量,这个过程也就是所谓的离散化。

    如UVA10173

    题意:在平面内用最小的矩形覆盖平面内所有的点。

    这个问题不好处理 因为我们不知道矩形到底倾斜多少度。但是矩形的每条边一定有1个点。

    可以想象平面内四条边像点的方向逼近,当穿过点时停止。

    方法可行,但是矩形的倾斜角是个实数无法枚举。

    我们又考虑,矩形至少有1条边经过连个两个点,所以我们计算出两两点的斜率进行枚举。将实数分解为一个一个的整数。

    (2)

    数据已经是一个个整数了,但范围极大,我们想方法缩小规模。

    如: 100000  10000000000   100000000000000000    10000000000000000000000000

    这四个数字和 1 2 3 4个数字没有区别。

    典型例题:矩形覆盖

    四、使用步骤

    (1)排序 去重 索引

    (2)代码实现

    #include<iostream>
    #include<cstdio>
    #include<algorithm> 
    using namespace std;
    int a[100],newx[100],hashx[100];
    int n,size;
    /*int lower_bound(int x)
    {
        int l=1,r=size,mid;
        while(l<=r)
        {
            mid=l+r>>1;
            if(a[mid]==x)return mid;
            if(a[mid]<x)l=mid+1;
            else
            r=mid-1; 
        }
     }*/ 
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            hashx[i]=a[i];
        }
        sort(hashx+1,hashx+n+1);
         size=unique(hashx+1,hashx+n+1)-(hashx+1);
        for(int i=1;i<=n;i++)
        newx[i]=lower_bound(hashx+1,hashx+n+1,a[i])-hashx;
        printf("%d
    ",size);//排序去重后的数字个数。 
        for(int i=1;i<=n;i++)
        printf("%d ",newx[i]);
        printf("
    ");
        for(int i=1;i<=size;i++)//知道离散化后的数求原数。 
        printf("%d ",a[newx[i]]);
        return 0;
    }
    /*
    栗子1: 
    5
    1 5 10 15 20
    5//排序去重之后数的个数 
    1 2 3 4 5
    1 5 10 15 20
    */
    /*
    5
    1 1 5 10 15
    4       //两个1相同去重之后记为1个数。 
    1 1 2 3 4
    1 1 1 5
    */ 

    参考:http://www.cnblogs.com/kevince/archive/2014/08/06/3893531.html

            http://www.matrix67.com/blog/archives/108

  • 相关阅读:
    ffmpeg-3.2.4-static-win32-for-XP-bin.tar.xz
    FFmpeg Scaler Options
    MinGW GCC 6.3.0 2017年3月份出炉啦
    ffmpeg-201701[10,16,21,23,25]-bin.7z
    ffmpeg-201612[01,08,10,17,21,27,30]-bin.7z
    Firefox Portable Developer 52.0.0.6176-6178
    DIR 按文件名中数字大小进行排序
    ffmpeg-20161104[07,10,16,21,22,27,30]-bin.7z
    gnuWin32-mini-2016.10.30
    gnu coreutils-8.25 for win32 static
  • 原文地址:https://www.cnblogs.com/zzyh/p/6991642.html
Copyright © 2011-2022 走看看