資料離散化處理

2022-05-25 01:15:12 字數 968 閱讀 3033

有時候,我們需要使用陣列下標來維護某些資料結構(例如並查集),但如果資料範圍太大我們開不了這麼大的陣列,這時候,我們就要將資料進行離散化。

例如資料我們可以根據相對大小關係67542347<75331434<87433476<99844531來開乙個新陣列編號,二分查詢在新陣列裡的編號。如b[1]=67542347,b[2]=75331434,b[3]=87433476,b[4]=99844531。當我們要查詢99844531這個資料的時候,就能在b中找到它的編號為4,就可以用4來代表這個資料啦。

根據這種查詢方法,我們要對元素進行去重,即去除重複元素。

其中我們需要用到兩種函式:

unique函式:不斷將不重複元素佔據前面重複元素的位置(相鄰的重複元素),返回的是不重複序列的最後乙個元素的下乙個元素的位址。

lower_bound:從陣列的起始位置到結束位置(左閉右開)二分查詢第乙個大於或等於傳入的引數的元素,返回的是該元素的位址,減去陣列起始位置就得到該元素的下標。

沒找到則返回end。

附上**:

1 #include2 #include3

using

namespace

std;

4int

n; 5

int a;//

需離散化的資料

6int b;//

儲存離散化後的

7int

main()

11   sort(b+1,b+1+n);//

對資料排序,因為unique函式「除去」的是相鄰重複元素

12int m=unique(b+1,b+n+1)-b-1;//

去除相鄰重複元素,返回無重複元素的長度m

13int x=lower_bound(b+1,b+m+1,a[1])-b;//

假設要查詢的資料是a[1],x為a[1]在陣列b中的位置即下標

14return0;

15 }

資料離散化處理

離散化,把無限空間中有限的個體對映到有限的空間中去,以此提高演算法的時空效率。通俗的說,離散化是在不改變資料相對大小的條件下,對資料進行相應的縮小。例如 原資料 1,999,100000,15 處理後 1,3,4,2 原資料 處理後 例如有時需要將資料直接作為陣列下標,但因為資料太大而無法開陣列時,...

資料離散化處理

離散化處理有幾個方法 方法一 適用於所有情況 sort unique lower bound 三段式 關於這幾個函式請見我的另一篇部落格 1 申請兩個陣列num和numcopy 這個陣列是num的副本 2 利用unique函式對num陣列進行去重 3 利用lower bound函式獲得numcopy...

資料離散化處理

離散化,把無限空間中有限的個體對映到有限的空間中去,以此提高演算法的時空效率。通俗的說,離散化是在不改變資料相對大小的條件下,對資料進行相應的縮小。例如 原資料 1,999,100000,15 處理後 1,3,4,2 原資料 處理後 用法 很多演算法的複雜度與資料中的最大值有關,比如樹狀陣列和純用陣...