離散化,把無限空間中有限的個體對映到有限的空間中去,以此提高演算法的時空效率。
通俗的說,離散化是在不改變資料相對大小的條件下,對資料進行相應的縮小。例如:
原資料: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.離散化後的特徵對異常資料有很強的魯棒性 比如...