資料的離散化

2021-07-30 14:04:19 字數 1179 閱讀 7198

有些資料本身很大, 自身無法作為陣列的下標儲存對應的屬性。

如果這時只是需要這堆資料的相對屬性, 那麼可以對其進行離散化處理!

離散化:當資料只與它們之間的相對大小有關,而與具體是多少無關時,可以進行離散化。 例如

9 1 0 5 4 與 5 2 1 4 3 的逆序對個數相同。

設有4個數:

1234567、123456789、12345678、123456

排序:123456<1234567<12345678<123456789

=>     1     <        2       <        3       <        4

那麼這4個數可以表示成:2、4、3、1

使用stl演算法離散化:

思路:先排序,再刪除重複元素,然後就是索引元素離散化後對應的值。

假定待離散化的序列為a[n],b[n]是序列a[n]的乙個副本,則對應以上三步為:

sort

(sub_a,sub_a+n);

int size=

unique

(sub_a,sub_a+n)-sub_a;

//size為離散化後元素個數

(如果不考慮元素數量的話,例如csu1335(高橋與地橋) 輸出的是滿足的數量,所以就不再進行這一步)
for

(i=0

;ia[i]=

lower_bound

(sub_a,sub_a+size,a[i])-sub_a +1;

//k為b[i]經離散化後對應的值

對於第3步,若離散化後序列為0, 1, 2, ..., size - 1則用lower_bound,從1, 2, 3, ..., size則用upper_bound,其中lower_bound返回第1個不小於b[i]的值的指標,而upper_bound返回第1個大於b[i]的值的指標,當然在這個題中也可以用lower_bound然後再加1得到與upper_bound相同結果,兩者都是針對以排好序列。使用stl離散化大大減少了**量且結構相當清晰。

資料的離散化

有些資料本身很大,自身無法作為陣列的下標儲存對應的屬性。如果這時只是需要這堆資料的相對屬性,那麼可以對其進行離散化處理!離散化 當資料只與它們之間的相對大小有關,而與具體是多少無關時,可以進行離散化。例如 9 1 0 5 4 與 5 2 1 4 3 的逆序對個數相同。設有4個數 1234567 12...

資料的離散化

使用stl演算法離散化 思路 先排序,再刪除重複元素,然後就是索引元素離散化後對應的值。假定待離散化的序列為a n b n 是序列a n 的乙個副本,則對應以上三步為 include include using namespace std int a 1005 int main unique 函式是...

資料離散化

離散化有兩種方法 第一種,先看一段 const int n 1e5 7 int t n a n int main 在這段 中,a經過離散,範圍就變成了m。解釋一下,unique是c 自帶的乙個函式,表示對乙個數列去重,然後返回不重複的元素個數,當然在後面要減去首位址。那麼這種離散化對於有重複元素的數...