問題引入:輸入n個資料,統計每個數出現的次數。資料大小為小於等於1e9的正整數,n小於等於1e5
很顯然,如果直接開乙個1e9的陣列來記錄每個元素出現的次數,那肯定會mle,因此要把我們輸入的資料進行離散化操作。即把無限空間中有限的個體對映到有限的空間中去,以此提高演算法的時空效率。通俗的說,離散化是在不改變資料相對大小的條件下,對資料進行相應的縮小。
而在演算法競賽中,對於重複資料可以刪掉的一組資料,離散化具體操作如下:
1.sort函式進行排序,排序之後方便進行去重操作;
2.unique函式進行去重,同時得到當前陣列的大小size
第乙個引數指數組的起始位址位置,第二個引數指終止位置,且是左閉右開,得到不重複的最後的位置,然後減去初始位置,即是新的陣列的大小。(unique不會刪除相鄰的重複元素,而是把重複元素都放在了陣列的尾部)
size =
unique
(arr+
1,arr+n+1)
-a;
3.lower_bound函式進行離散化數值
new_pos =
lower_bound
(arr+
1,arr+size+
1,arr[i]
)-arr;
lower_bound()返回第乙個大於等於arr[i]的元素的位址,然後減去初始位址,則得到當前元素的下標(下標初始從0開始計數),查詢方式為二分查詢,且同樣是左閉右開,如果沒有找到該元素,則返回size+1。至此,離散化操作就結束了,這只是對資料的初始操作,重點還是後續!
int
main()
例題:牛客小白月賽24-h-人人都是好朋友
1e9的資料進行並查集明顯會mle,但由於輸入的資料不大,所以可以先進行預處理離散化(因為具體的數的大小是無所謂的,只有相對大小被考慮)
資料預處理06 資料變換和資料離散化
光滑 去掉資料中的雜訊,包括分箱 回歸和聚類。屬性構造 特徵構造 可以由給定的屬性構造新的屬性並新增到屬性集中。聚集 把資料進行彙總或聚集。例如 可以聚集日銷售資料,計算月和年銷售量。規範化 把屬性資料按比例縮放,使之落入指定區間。離散化 數值屬性 例如 年齡 的原始值用區間標籤或者概念標籤替換。這...
Python實現資料預處理 離散值處理
1.pandas進行特徵離散處理 標籤處理通常會把字元型的標籤轉換成數值型的 特徵處理 對於特徵來說,一般可以做乙個對映的字典 還可以轉換成編碼 還原資料初始狀態 2.使用sklearn進行離散值處理的方式如下 標籤編碼 labelencoder 資料還原回去可以用inverse transform...
23 資料預處理之資料離散化處理
pandas.cut x,bins,right true,labels x 資料 bins 離散化的資料,或者切分的區間 labels 離散化後各個類別的標籤 right 是否包含區間右邊的值 等寬分箱 df age bin pd.cut df age new 5,labels range 5 不加...