• 沒有找到結果。

Dynamic Programming 為主之演算法

第四章 節點分群與加邊之演算法

4.1 三種節點分群演算法

4.1.1 Dynamic Programming 為主之演算法

Dynamic Programming 為一個可以有效得出一個問題的最佳解,其概念與 Divide and Conquer 類似,作法是先將原始問題分成數個子問題來解決,並動態 存取每次所解決的子問題的答案,以利於節省計算重複問題的時間,每個子問 題都有一個最佳解,將所有子問題解決後,即可得到原問題的最佳解。如圖 15,若要計算從 VS點到 VT點的最短路徑,首先須找出各點到其鄰居的距離,

並從 VS點開始每次路徑增加一個節點時,就調整最短路徑的途徑,直到終點 VT

點為止。如 VS到其鄰居的最近距離為 2,即為 VS到 VB的距離。接著當路徑要 在新增一個節點時則重新評估最短路徑的途徑,比較{VS, VA, VD}, {VS, VB, VD}….等路徑長度,並在這些路徑其中找出最短路徑。即為{VS, VB, VD},以此 類推,最後得出 VS到 VT的最短路徑是{VS, VB, VD, VT}。

S

C

A D

F

B

T

8

E

圖 15 Dynamic Programming 範例

Liu et al. (2008) 所提出的 k-degree anonymous 方法中修改 Dynamic

Programming 來做節點分支度分群,此方法的前提是以每一群的分群大小需要 控制在 k 與 2k-1 個節點之間,當分群大小等於或超過 2k 時,則將此群分成兩 群,原因是因為當群內的節點越多,則每一群內的加邊總數就越高,故此做法 能降低每一群的群集之隱匿成本。原始的 Dynamic Programming 執行時間為 𝑂(𝑛2),原因是 Dynamic Programming 必須將所有的分群結果計算完後,考慮每 一種分群結果,才可得知哪一種分群結果的加邊數量最少;但在經過 Liu et al.

修改過後的 Dynamic Programming 方法只需花𝑂(𝑛𝑘),詳細流程如下。k 代表每 群節點群集至少要有 k 個節點;n 代表總節點數, d 代表節點分支度數由大到 小排序後的分支度序列,此序列的關係 : 𝑑(1) ≥ 𝑑(2) ≥ ⋯ ≥ 𝑑(𝑛);𝑑̂ 代表隱 匿後的分支度序列;DA( d[1, i])代表 d[1, i]序列的分支度隱匿成本;I( d[i, j])代 表當節點i, i+1, …,j 皆被放入同一群時,此群的隱匿成本。故可得知以下關 係:

𝐼(𝑑[ 𝑖, 𝑗]) = ∑(𝑑(𝑖) − 𝑑(𝑙))

𝑗

𝑙=𝑖

從以上的關係建立 Dynamic Programming 的等式:

(1) 當 i < 2k 時

𝐷𝐴( 𝑑[1, 𝑖]) = 𝐼(𝑑[ 1, 𝑖]) (2) 當 i ≥ 2k 時

𝐷𝐴( 𝑑[1, 𝑖]) = 𝑚𝑖𝑛

𝑗 ≤ 𝑡 ≤ 𝑖−𝑘(𝐷𝐴(𝑑[ 1, 𝑡]) + 𝐼( 𝑑[ 𝑡 + 1, 𝑖])) 且 j = max{ k, i-2k+1}

式子(1)指當群內節點數少於 2k 個時,無法將節點分成兩群,故這些節點將全 部分為一群,隱匿成本即代表當群內的節點要將分支度數增加至與 d(1)的分支 度相同所需要的邊數。式子(2)則代表當節點數等於或超過 2k 個時,則分支度 隱匿成本為 d[1, t]序列的隱匿成本再加上群內節點為 t+1, t+2,…到第 i 個節點的 最佳隱匿成本,並且每一群的大小皆不能超過 2k。此方法只需花𝑂(𝑛),大大的

加速執行速度。

以圖 12 為例,圖形上的 TN ( Transfer Node)為{VX , VE, VG, VD, VF, VY},其 分支度分別為{ 3, 5, 3, 4, 2, 4},如表 2,將 TN 依分支度由大到小排序成為一串 新序列TN’, TN’為{ VE, VD, VY, VX , VG, VF},其分支度為{5, 4, 4, 3, 3, 2}。若 k2

等於 2,TN’的節點數共有六個,則必須分成兩群。而這些節點的數量大於 2k2,故若要求出此序列的隱匿成本,則需要由式子(2)的條件才能求得。此序列 的隱匿成本為𝐷𝐴(𝑑[ 1, 𝑡]) + 𝐼( 𝑑[ 𝑡 + 1, 𝑖])的最小值,其中 t 的範圍必須界定在 j ≤ t ≤ i-k ,j 代表 max{ k, i-2k+1},從上述已知可得出 j =3,t 的範圍即為 3≤ t

≤4。將這些參數帶回原式後可得到分群結果為{ VE, VD, VY }及{ VX, VG, VF}。最 後我們在檢查這些分群結果內的節點是否皆在同一條最短路徑上,當有違反此 限制的節點群時,則從其他節點群中找出分支度數與此群分支度數最大值最相 近的節點,並挑出一節點與另一群分支度數最大值最相近的節點做交換,來滿 足此限制條件。

以下為 Dynamic Programming 之演算法:

Input:1. 一張 k-anonymous path privacy 的隱匿圖 2. k2

Output:若干個至少包含 k2個節點的群集 Parameter:

TN : 最短路徑上所經過的點 SP : 最短路徑

Nsp: 最短路徑上的所有節點 S : 起點

T : 終點

d:分支度序列 n:代表節點數 演算法:

1. Find all SPs a Nsp

2. 令 TN = { ti | 包含所有 TN 的集合}

3. For each ti 4. di = ti的分支度

5. 依照節點分支度由大到小排序 6. 令 I( d[ i , j ] ) = ∑𝑗𝑙=𝑖(𝑑𝑖 − 𝑑𝑙) 7. if ( | TN| < 2k2) then

8. DA(d[ 1, i ] ) = I( d[ 1,i ] ) 9. Else

10. DA(d [1, i] ) = 𝑚𝑖𝑛

𝑚𝑎𝑥{𝑘2,𝑖−2𝑘2+1 }≤𝑡≤𝑖−𝑘2{𝐷𝐴(𝑑[1, 𝑡]) + 𝐼(𝑑[𝑡 + 1 , 𝑖])}

11. If (a cluster contains nodes all from the same SP), then

12. Select a vertex that has closest node degree with neighboring cluster vertex, not on the same SP, and swap the two vertices;

相關文件