博文链接:如果还没有了解过离散化戳这里
问题链接:P1966 火柴排队
题目给出了INT_MAX级别的数组。这不仅对面子内存是一个挑战,最主要的是分散的数组不利于我们进行连续操作。
但是离散化究竟有什么直观的含义呢?好像很多人都同我一样觉得这个很难理解。
比如这样一位同学:(我太懂了!!)
直入主体
数组准备
比如思考这样一个乱序的大幅度序列b,构建它的辅助数组a,用来表明序号变化,同时减小数组元素的变化幅度。
a: [1] [2] [3] [4] ------------>
b: 2 3 1 4 ------------>
在这个辅助关系当中,我们发现元素2和序号[1]绑定,元素3和序号[2]绑定,元素1和序号[3]绑定,元素4和序号[4]绑定。
过程描述
经过对元素的排序,我们对应着发现,最小的1对应的[3]挪到前面,最大的4仍然在数组的最末尾。
a: [1] [2] [3] [4] ------------> c: [3] [1] [2] [4]
b: 2 3 1 4 ------------> d: 1 2 3 4
所以整个过程当中就有四个有效数组
离散化函数的映射描述
在离散化过程当中,一旦变得有序,就丧失了信息量。
所以,考虑的核心I/O是数组b和c。
b是定义空间(映射输入),是离散化之前的数组。幅度大,不连续。
解空间(映射输出)c,即是离散化后所得的数组。通过连续序号变序而来,幅度小,填满较小的自然数空间。
离散化函数的直观描述
如果将离散化定义成一个函数 f ( n ) f(n) f(n),那么它的目的就是寻找原数列中第n小的元素处于哪一位,答案是第f(n)位。
总体的作用是压缩只考虑大小关系的定义空间。
后记
也不知道有没有解释清楚或者有没有帮助。有疑问可以提出来啊……
诚求指教。