離散化在演算法競賽中是乙個很常用且非常好用的乙個技巧,所以學習一下這個還是很有必要的。
一、離散化:離散化指的是把大數化為小數,並且保持這幾個數的相對大小不變。比如:原數是1 101 102,離散化之後就是1 2 3。
二、離散化的實現:假設我們的陣列是a,並且在開乙個輔助陣列b。賦初值時b[i] = a[i]。之後我們對b陣列進行排序。之後我們如何求a陣列離散化之後的數呢?我們可以看到,其實離散化之後的數就是原數在原陣列排序以後的下標位置。但考慮到重複的情況,所以我們要將原陣列(即b陣列)去重排序。之後我們用lower_bound函式查詢a[i]在b陣列中的下標位置就好。具體**實現如下:
sort
(b+1
,b+n+1)
;///對b陣列去重排序,直接呼叫標頭檔案algorithm中的unique函式就好
int pos =
unique
(b+1
,b+n+1)
-(b+1)
;for
(int i =
1; i <= n ; i++
)
這樣,對於原陣列1 101 101 102 103,離散化之後就是1 2 2 3 4啦。
但如果我們想得到的離散化的陣列是1 2 2 4 5呢?那對b陣列進行排序以後不去重就好啦!!!**就不貼啦。
那離散化之後我們如何得到原來的資料呢?離散化後的資料是原數在b陣列中的下標位置,所以b[a[i]]就是原資料!!!
離散化學習
有些資料本身很大,自身無法作為陣列的下標儲存對應的屬性。如果這時只是需要這堆資料的相對屬性,那麼可以對其進行離散化處理!離散化 當資料只與它們之間的相對大小有關,而與具體是多少無關時,可以進行離散化。例如9 1 0 5 4 與 5 2 1 4 3 的逆序對個數相同。設有4個數 1234567 123...
強化學習總結 對於離散空間
強化學習 reinforcement learning 是一種重要的機器學習方法。所謂強化學習就是智慧型體從環境到行為對映的學習,目標是最大化期望積累獎勵。強化學習廣泛應用於無人駕駛汽車,棋類遊戲和機械人等領域當中。強化學習不屬於監督學習,也不屬於非監督學習。階段性任務 智慧型體與環境的互動在乙個特...
樹狀陣列 離散化 學習心得
應用 用於計算各種 區間和 時間複雜度 n log2n 基本概念及模板 求和原理 線段樹求和是二分空間,而真正求和只需要用到其中的左側空間,因此出現樹狀陣列。lowbit函式 用於計算二進位制最低位1所在位置的權值 int lowbit int x 樹狀陣列中每個頂點覆蓋的範圍 x lowbit n...