c++離散化處理大範圍和重複數據

c++離散化處理大範圍和重複數據

關於離散化

有些新手可能會問:離散化是什麼?離散化就是將無限空間中有限的個體映射到有限的空間裏去。

上面的定義肯定會有人看不懂(其實我剛開始學的時候也看不懂)

用我自己的話來說,就是在不改變數據的相對大小的條件下,對數據進行相應的壓縮

可能還是有人看不懂,沒關係,我們來看一個例子,順便來講一下離散化的基本操作:

現有一個數組:1,100,2367,562,364737,19,1974832947,100,562,2367

如果按照正常的方法,該開1974832947的空間,但是經過離散化後,就不需要

那麼step 1:排序

用上面的例子來說,就是將上面的數據排序並去重,得到下面這組數據:

1,19,100,100,562,562,2367,2367,364737,1974832947

然後step 2:通過unique去重使大小與下標對應,並得到去重後的長度,得到下面這組數據:

1,19,100,562,2367,364737,1974832947

接着step 3:通過lower_bound算出離散化後的排列,得到下面這組數據:

1,2,3,4,5,6,7

那麼這裏就很尷尬了,這組數據無法應用於初始數據

所以在開始,我們多定義1個數組,來記錄初始情況下的數據,再用step 3與其進行對應。

最終得到答案:1,3,5,4,6,2,7,3,4,5

下面給出模板:

 View Code
原文地址https://www.cnblogs.com/jasonownblog/p/12906712.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章