離散化介紹

2021-07-26 21:45:19 字數 1897 閱讀 1416

離散化,把無限空間中有限的個體對映到有限的空間中去,以此提高演算法的時空效率。

通俗的說,離散化是在不改變資料相對大小的條件下,對資料進行相應的縮小。例如:

原資料:1,999,100000,15;處理後:1,3,4,2;

原資料:,,;

處理後:,,;

中文名 離散化

外文名 discretization

作用 提高演算法的時空效率

物件 無限空間

方式 個體對映到有限的空間中

概述:

離散化是程式設計中乙個非常常用的技巧,它可以有效的降低時間複雜度。其基本思想就是在眾多可能的情況中「只考慮我需要用的值」。離散化可以改進乙個低效的演算法,甚至實現根本不可能實現的演算法。要掌握這個思想,必須從大量的題目中理解此方法的特點。

舉例:建造線段樹空間不夠,可以考慮離散化。

離散化 procedure,功能是將 a 陣列(下標:0..maxn)轉換成 a* (0..maxn 的整數),保證 a (i) < a (j) <==> a* (i) < a* (j),a (i) =a (j) <==> a* (i) =a* (j)

程式:

type    

arrayoflongint = array [0..maxn] of longint;

procedure

discretize

(var a : arrayoflongint);

//主過程

var

i :longint;

b, c : arrayoflongint;

procedure

qsort

(l, r : longint);

var

x, y : longint;

i, j : longint;

begin

i := l;

j := r;

x := a [(l + r) div

2];

repeat

while a [i] < x do inc (i);

while x < a [j] do dec (j);

ifnot (i > j) then

begin

y := a [i];

a [i] := a [j];

a [j] := y;

y := b [i];

b [i] := b [j];

b [j] := y;

inc (i);

dec (j);

end;

until i > j;

if l < j then qsort (l, j);

if i < r then qsort (i, r);

end;

begin

fillchar (b, sizeof (b), 0);

fillchar (c, sizeof (c), 0);

for i := 0

to n dob [i] := i;

qsort (0, n);

c [b [0]] := 0;

for i := 1

to n do

if (a [i] = a [i - 1]) then

//處理 a (i) = a (j) 的情況,這也是為什麼不直接覆蓋 a 而使用 c 陣列

c [b [i]] := c [b [i - 1]]

else

c [b [i]] := i;

fillchar (a, sizeof (a), 0);

for i := 0

to n doa [i] := c [i];

end;

離散化問題

題目傳送 uvalive 4127 the sky is the limit 大白書離散化簡單題。找了半天錯誤,居然是少輸出乙個空行。頓時感覺自己萌萌噠。其中計算幾何是套的之前留下的模板。ac include include include include include include inclu...

座標離散化

問題 在w h的格仔上畫了n條垂直或者水平的寬度為1的直線。求出這些直線將格仔劃分為了多少個區域?限制條件 1 w,h 1000000 1 n 500 輸入 首先輸入w,h,n 然後輸入對應的x1,x2,y1,y2.輸出區域的個數。輸入 10 10 5 x1 1 1 4 9 10 x2 6 10 4...

特徵離散化

在工業界,很少直接將連續值作為邏輯回歸模型的特徵輸入,而是將連續特徵離散化為一系列0 1特徵交給邏輯回歸模型,這樣做的優勢有以下幾點 0.離散特徵的增加和減少都很容易,易於模型的快速迭代 1.稀疏向量內積乘法運算速度快,計算結果方便儲存,容易擴充套件 2.離散化後的特徵對異常資料有很強的魯棒性 比如...