將大值資料離散化做法

2021-05-22 02:05:33 字數 681 閱讀 7118

一種離散化方法 (from poj2299

);

離散化是一種常用的技巧,有時資料範圍太大,可以用來放縮到我們能處理的範圍;

此題是求逆序數;可以用歸併排序,也可以用樹狀陣列,但是樹狀陣列就得離散化了;

因為其中需排序的數的範圍0---999 999 999

;顯然陣列不肯能這麼大;

而n的最大範圍是

50 000

;故給出的數一定可以與

1.。。。

n建立乙個一一對映;

①當然用map

可以建立,效率可能低點;

②這裡用乙個結構體

struct node

p[510000];和乙個陣列

a[510000];

其中v就是原輸入的值,

ord是下標;然後對結構體按

v從小到大排序;

此時,v

和結構體的下標就是乙個一一對應關係,而且滿足原來的大小關係;

for(i=1;i<=n;i++) a[p[i].ord]=i;

然後a陣列就儲存了原來所有的大小資訊;

比如 9 1 0 5 4 -------

離散後a

陣列就是

5 2 1 4 3;

如果運用qsort(_)函式,則複雜度應該為(n*log(n))

線段樹練習題一(離散化做法)

time limit 10000ms memory limit 65536k total submit 228 accepted 76 case time limit 1000ms description 桌子上零散地放著若干個盒子,桌子的後方是一堵牆。如右圖所示。現在從桌子的前方射來一束平行光,把...

Python實現資料預處理 離散值處理

1.pandas進行特徵離散處理 標籤處理通常會把字元型的標籤轉換成數值型的 特徵處理 對於特徵來說,一般可以做乙個對映的字典 還可以轉換成編碼 還原資料初始狀態 2.使用sklearn進行離散值處理的方式如下 標籤編碼 labelencoder 資料還原回去可以用inverse transform...

資料結構 離散化 權值線段樹

先介紹一下離散化 桶排大家應該知道,就是開乙個陣列 下標為數值,記錄了該數值的出現次數 然後遍歷過去如果出現次數不為零,那就輸出這些數字,理論時間複雜度可以達到o n 但是由於記憶體限制,不能開很大的陣列。然而 如果某個數列中的數字不要求大小確定,只要求這些數字有相對的大小就夠了的話,離散化就有了用...