Paper Reading: SymBi, Update DCS
2025๋ ์ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฉ์ ์ปจํํ์ฌ ํ๋ถ ์กธ์ ์ฐ๊ตฌ ์ฃผ์ ๋ฅผ ๋ฐ์์ ์งํํ๊ณ ์์ต๋๋ค. ์ ์ ์ฃผ์ ๋ โContinuous Subgraph Matchingโ๊ณผ ๊ด๋ จํด ์ฝ๋๋ฅผ ์ต์ ํ ํ๊ณ ๊ฐ์ ํ๋ ๊ฒ์ผ๋ก ๊ทธ๋ํ ์ฟผ๋ฆฌ ๊ด๋ จ ๋ ผ๋ฌธ์ ์ฝ๊ณ , C++ ์ฝ๋๋ฅผ ํ๋ํ๊ณ ์์ต๋๋ค. ์กธ์ ๋ง์ง๋ง ํ๊ธฐ์ ๋ฃ๋ ์์ ์ธ๋ฐ ๋ง์ ๋ ธํ์ฐ์ ๊ฒฝํ์ ์๊ณ ์กธ์ ํ๊ธฐ๋ฅผ ๊ธฐ๋ํ๊ณ ์์ต๋๋ค ใ ใ
How to Update DCS
์ด์ ํฌ์คํธ์์ DCS ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ฑํ๊ณ ๊ฐ๋ค์ ์ ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์ดํด๋ณด์์ต๋๋ค. (๊ธธ๋ค๊ธธ์ดโฆ)
๋ณธ๋ SymBi์์ ํธ๋ ค๊ณ ํ๋ ๋ฌธ์ ๋ Update Stream $\Delta o_i$๊ฐ ์กด์ฌํ๋ CSM ๋ฌธ์ ์ ๋๋ค.
$\Delta o_i$๋ ์ฝ์ ๊ณผ ์ญ์ ๊ฐ ๊ฐ๋ฅํ์ง๋ง, ์ฝ์ ๊ณผ์ ์ ์ ๋๋ก ์ดํดํ๋ฉด ์ญ์ ๊ณผ์ ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด ํฌ์คํธ์์๋ ์ฝ์ ๊ณผ์ ์ ๋ํด์๋ง ๊ธฐ์ ํ๊ฒ ์ต๋๋ค. ์์ผ๋ก์ ๋ชจ๋ Update Stream์ ๋ชจ๋ ์ฃ์ง ์ฝ์ ์ ๋ ์ ๋๋ค.
DCS Change Edge
Insert Stream $\Delta o_i$๋ก ์ธํด์ ์๋ก ์ฐ๊ฒฐ๋์ง ์์๋ DCS ๋ ธ๋๊ฐ ์ฐ๊ฒฐ๋ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ์ฐ๊ฒฐ๋๋ DCS Edge์ ์งํฉ $E_{\text{DCS}}$๋ฅผ ์ฐพ์๋ด๋ ๊ฒ์ด ์ฒซ๋ฒ์งธ๋ก ํ ์ผ ์ ๋๋ค.
- Get newly inserted edge $e = (v, vโ)$.
- Traverses the query graph $q$ and find an edge $(u, uโ)$ s.t.
- $l_q(u) = l_g(v)$ and
- $l_q(uโ) = l_g(vโ)$
- Insert the edge $(<u, v>, <uโ, vโ>)$ into the set $E_{\text{DCS}}$.
Update $D_1$
Edge Insert๋ก ์ถ๊ฐ๋ DCS Edge์ ์งํฉ $E_{\text{DCS}}$๋ฅผ ์ป์๊ณ , ์ด์ ์ด๋ฅผ ๋ฐํ์ผ๋ก DCS์ $D_1$, $D_2$ ๊ฐ์ ์ ๋ฐ์ดํธ ํด์ผ ํฉ๋๋ค.
$E_{\text{DCS}}$์์ DCS ์ฃ์ง ํ๋ $(<u_p, v_p>, <u, v>)$๋ฅผ ๊ณจ๋ผ์ ๊ณผ์ ์ ๋ฐ๋ผ๊ฐ๋ด ์๋ค. ์ด๋ ์ผ์ด์ค๊ฐ 2๊ฐ์ง๋ก ๋๋๋๋ฐ,
[$D_1[u_p, v_p] = 0$]
์ด ๊ฒฝ์ฐ๋ Parent Node์์ Parent Subgraph Matching์ด ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ ์ ๋๋ค.
์ด๋๋ $(<u_p, v_p>, <u, v>)$ ์ฌ์ด์ ์ฐ๊ฒฐ์ด ์๊ฒจ๋ Parent DCS Node์ ๋ํด์ Subgraph Matching์ด ์ฑ๋ฆฝ๋์ง ์์ ๊ฒ์ด๋ผ๋ ๋ง ์ ๋๋ค.
๊ทธ๋์ $D_1$ ์ ๋ฐ์ดํธ ๊ณผ์ ์ ์ข ๋ฃ ํฉ๋๋ค.
[$D_1[u_p, v_p] = 1$]
์ด ๊ฒฝ์ฐ๋ Parent DCS Node์ ๋ํด Subgraph Matching์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ ์ ๋๋ค!
์ด๋๋ ์ ๋์ผ๋ก ์ธํด์ $D_1[u, v]$์ ๊ฐ์ด 0์์ 1๋ก ๋ฐ๋ ์ฌ์ง๊ฐ ์์ต๋๋ค. ๊ทธ๋์ $D_1[u, v]$์ ๊ฐ์ ๋ค์ ๊ณ์ฐํฉ๋๋ค. ์ฐ๋ฆฌ๋ $<u, v>$์ ๋ถ๋ชจ ์ค ํ๋์ธ $<u_p, v_p>$์ ๋ํด์๋ $D_1$ ๊ฐ์ด 1์ธ ๊ฒ์ ํ์ธํ์ผ๋, ๋๋จธ์ง ๋ค๋ฅธ ๋ถ๋ชจ $<u_pโ, v_pโ>$ ๋ชจ๋์ ๋ํด์ $D_1[u_pโ, v_pโ] = 1$๋ฅผ ๋ง์กฑํ๋์ง๋ฅผ ์ฒดํฌํ๋ฉด ๋ฉ๋๋ค.
๋ง์ฝ, ์ ๋์ผ๋ก ์ธํด $D_1[u, v]$ ๊ฐ์ด 0์์ 1๋ก ๋ฐ๋์๋ค๋ฉด, $<u, v>$์ ๋ชจ๋ ์์ ๋ ธ๋๋ค๋ $D_1$ ๊ฐ์ด ๋ฐ๋ ์ฌ์ง๊ฐ ์์ต๋๋ค. ๊ทธ๋์ $D_1$ ์ฌ๊ณ์ฐ ๊ณผ์ ์ ๋ชจ๋ ์์ ๋ชจ๋์ ๋ํด์๋ ์ํํด์ค๋๋ค. (์ฌ๊ท)
Side-effect
๊ทธ๋ฐ๋ฐ, ์ฌ๊ธฐ์์ ์ฐ์ฐ์ ๋์ด๋ผ ์ ์๋ ๋ถ๋ถ์ด ์กด์ฌํฉ๋๋ค!
์ผ๋จ ์ด ๋ฐฉ๋ฒ์ $D_1[u, v]$์ ์ฌ๊ณ์ฐ ํ๊ธฐ ์ํด, ์ด๋ฒ ์ ๋ฐ์ดํธ์์ ๋ณํ๊ฐ ์์๋ ๋๋จธ์ง ๋ถ๋ชจ ์ ๋ถ์ $D_1[u_p, v_p]$ ๊ฐ์ ํ์ธํด์ผ ํฉ๋๋ค. ๋ง์ฝ, ์ด DCS ๋ ธ๋์ $N$๊ฐ Parent๊ฐ ์์๋ค๋ฉด, ๋งค๋ฒ $O(N)$์ ์ฐ์ฐ์ด ๋ค๊ฒ ๋ฉ๋๋ค.
๋ง์ฝ, ์ ๋ฐ์ดํธ ์คํธ๋ฆผ์ ์ํด $<u, v>$์ ๋ถ๋ชจ์ ๋ํด $M$๋ฒ์ ์ ๋ฐ์ดํธ๊ฐ ๋ฐ์ ํ๋ค๋ฉด, ์์ ๊ณผ์ ์ ์ต๋ $M$๋ฒ ๋ฐ๋ณตํด์ผ ํฉ๋๋ค. (๋จ, $D[u_{pi}, v_{pi}] = 0$์ธ ์ํฉ์ด๋ผ๋ฉด, $D_1[u, v]$ ์ ๋ฐ์ดํธ๋ ๋ฐ์ํ์ง ์๋ ๊ฒ์ ์ ์ ํฉ๋๋ค.)
๊ฒฐ๊ตญ $D_1[u, v]$ ๊ฐ์ ์ ๋ ํ๊ธฐ ์ํด์ ๊ทธ๊ฒ์ ๋ชจ๋ ๋ถ๋ชจ์ ๋ํ ๊ฐ ์ฐธ์กฐ๊ฐ ๋ฐ์ํ๊ณ ์ด๋ก ์ธํด, ์ต๋ $O(MN)$์ ๊ณ์ฐ ์ฝ์คํธ๊ฐ ๋ ๋ค๋ ๊ฒ ์ ๋๋ค.
๋ ผ๋ฌธ์์๋ ์ด ๊ณ์ฐ ์ฝ์คํธ๋ฅผ ์ค์ด๊ธฐ ์ํด ์ถ๊ฐ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ์ค๊ฐ๋จ๊ณ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋์ ํฉ๋๋ค!
Improved Updating
$D_1[u, v]$์ ๊ฐ์ ์ ๋ํ๋ ์ํฉ์ ๋ ์ฌ๋ ค๋ด ์๋ค. ์ด ๊ฐ์ด $D_1[u, v] = 0 \rightarrow 1$๋ก ๋ฐ๋๋ ์๊ฐ์ ๋ชจ๋ ๋ถ๋ชจ ๋ ธ๋ $u_p$์ ๋ํด์ $D_1[u_p, v_p] = 1$์ธ $v_p$๊ฐ ์กด์ฌํ ๋ ์ ๋๋ค.
์ด๊ฒ์ $D_1[u, v]$์ ๊ฐ์ด ์๋์ ๊ฐ์ด ๊ณ์ฐ๋ ์ ์์์ ๋งํฉ๋๋ค.
# ์ค๋ช
์ ์ํด ์์๋ก ์์ฑํ ์ฝ๋ ์
๋๋ค.
num_parent = get_parent(u) # O(1)
num_D1_parent = get_d1_parent(u, v) # O(N * |C(u_p)|)
D1[u][v] = (num_parent == num_D1_parent)
get_parent(u)
๋ ๊ทธ๋ํ ์ ๋ณด๋ฅผ ์ ์ ์ฅํด๋์ผ๋ฉด $O(1)$์ผ๋ก ๊ฐ๋ฅํ์ง๋ง,get_d1_parent(u, v)
๋ DCS ๊ทธ๋ํ๋ฅผ ์ํํด์ผ ํ๋ฏ๋ก, $O(N \times |C(u_p)|)$ ๋งํผ์ด ํ์ ํฉ๋๋ค.
D1 Parents Array $N^1_P[u, v]$
๊ทธ๋์ Symbi์์๋ get_d1_parent(u, v)
๋ฅผ ๋น ๋ฅด๊ฒ ๊ณ์ฐํ๊ธฐ ์ํด $N^1_P[u, v]$ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋์
ํฉ๋๋ค. ์ด ์๋ฃ๊ตฌ์กฐ๋ DCS ๋ถ๋ชจ ์ค์์ $D_1[u_p, v_p] = 1$์ธ $v_p$๊ฐ ์กด์ฌํ๋, ๋ถ๋ชจ ๋
ธ๋์ ๊ฐฏ์๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด ์
๋๋ค. ๊ทธ๋ผ ์ฝ๋๊ฐ ์๋์ ๊ฐ์ด ๋ฐ๋๋๋ค.
# ์ค๋ช
์ ์ํด ์์๋ก ์์ฑํ ์ฝ๋ ์
๋๋ค.
num_parent = get_parent(u) # O(1)
num_D1_parent = N1P[u][v] # O(1)
D1[u][v] = (num_parent == num_D1_parent)
๊ทธ๋ฐ๋ฐ, ์ด $N^1_P[u, v]$๋ฅผ ์ด๋ป๊ฒ ๊ตฌํ ์ ์์๊น์? ์ผ๋จ DCS ์๋ฃ๊ตฌ์กฐ๊ฐ ์ ์ ๋์ด ์๋ค๋ฉด, $N^1_P[u, v]$์ ์ ์๋ฅผ ๋ฐ๋ผ ๊ณ์ฐํด์ฃผ๋ฉด ๋ฉ๋๋ค. $N^1_P[u, v]$๋ฅผ ๊ตฌํ๋ ์์๋ ์๊ด ์์ต๋๋ค.
DCS ๊ทธ๋ํ์ $(<u_p, v_p>, <u, v>)$ ์ฃ์ง๊ฐ ์ถ๊ฐ๋ก ์ฐ๊ฒฐ ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด, $N^1_P[u, v]$์ ๊ฐ์ด ์ ๋ฐ์ดํธ๋ ์ฌ์ง๊ฐ ์์ต๋๋ค!
- ๋ง์ฝ $D_1[u_p, v_p] = 0$ ์ด๋ผ๋ฉด,
- $N^1_P[u, v]$ ์ฆ๊ฐ์ด ๋ฐ์ํ์ง ์์ต๋๋ค.
- ๋ง์ฝ $D_1[u_p, v_p] = 1$ ์ด๋ผ๋ฉด,
- $D_1[u_p]$์ ๋ํด์ $D_1[u_p, v_p] = 1$์ด Parent subgraph mapping์ ์ฒ์ ๋ง์กฑํ๋ ๋
์์ด์๋?
- ๊ทธ๋ฌ๋ฉด $N^1_P[u, v]$์ ๊ฐ์ 1 ์ฌ๋ ค์ค๋๋ค.
- ๊ทธ๋ฆฌ๊ณ $D_1[u, v]$ ๊ฐ๋ ์ฌ๊ณ์ฐ์ด ํ์ํฉ๋๋ค.
- ์ด๋ฏธ $D_1[u_p]$์์ Parent subgraph mapping์ ๋ง์กฑํ๋ ๋ค๋ฅธ $v_pโ$๊ฐ ์์๋ค๋ฉด,
- ๊ทธ๊ฑด $N^1_P[u, v]$์ ์ด๋ฏธ ๋ฐ์ ๋์ด ์์ต๋๋ค. ๊ฐ ๋ณํ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.
- ๋ง์ฐฌ๊ฐ์ง๋ก $D_1[u, v]$์ ๊ฐ๋ ๋ณํ๊ฐ ์์ต๋๋ค.
- $D_1[u_p]$์ ๋ํด์ $D_1[u_p, v_p] = 1$์ด Parent subgraph mapping์ ์ฒ์ ๋ง์กฑํ๋ ๋
์์ด์๋?
๊ทธ๋ฌ๋, ์ฌ๊ธฐ์์๋ ์ฌ์ ํ ๊ฐ์ ํ ๋ถ๋ถ์ด ์กด์ฌํฉ๋๋ค! ๋ฐ๋ก $D_1[u_p]$์ ๋ํด์ ์ด๊ฒ ์ฒ์์ผ๋ก Parent subgraph mapping์ ๋ง์กฑํ๋ ๋ ์์ด์๋์ง, ์๋ ๊ธฐ์กด์ Parent subgraph mapping์ ๋ง์กฑํ๋ ๋ ์์ด ์์๋์ง ํ์ธํ๋ ๊ณผ์ ์์ $O(| C(u_p) |)$ ๋งํผ ๊ณ์ฐ ๋น์ฉ์ด ๋ญ๋๋ค.
D1 Parent Candidates Array $N^1_{PC}[u, v, u_p]$
๋
ผ๋ฌธ์์๋ \(N^1_{PC}[u, v, u_p]\)๊ฐ ์๋๋ผ $N_{u, v}^1[u_p]$๋ผ๊ณ ํ๊ธฐํ์ง๋ง, ์ ๋ ํ๊ธฐ๊ฐ ๋๋ฌด๋๋ฌด ํท๊ฐ๋ ค์ ์ฌ๊ธฐ์๋ ์๋ก์ด ํ๊ธฐ๋ก ์์ฑํ๊ฒ ์ต๋๋ค. ๋ด ๋ง์์๋๋ก ใ
ใ
$PC$๋ Parent Candidate์ ์ฝ์ ์
๋๋ค.
SymBi๋ ์ด๊ฑธ $O(1)$ ์๊ฐ ๋ง์ ํ๋จํ๊ธฐ ์ํด์ ์ถ๊ฐ ์๋ฃ๊ตฌ์กฐ $N^1_{PC}[u, v, u_p]$๋ฅผ ๋์
ํฉ๋๋ค. (๊ทธ๋งโฆ)
์ด๊ฒ์ $<u, v>$์ ๋ถ๋ชจ ๋ ธ๋ $<u_p, v_p>$๊ฐ ์์ ๋, $D_1[u_p, v_p] = 1$์ ๋ง์กฑํ๋ $v_p$์ ๊ฐฏ์๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ ์ ๋๋ค.
์์๋ฅผ ํตํด \(N^1_{PC}\)์ ์ดํดํด๋ด ์๋ค. DCS์ ๋ ธ๋ $<u_2, v_3>$์ ๊ทธ๊ฒ์ ๋ถ๋ชจ ๋ ธ๋ $<u_1, v_p>$๊ฐ ์์ต๋๋ค. ์ด๋, $D_1[u_1, v_p] = 1$์ ๋ง์กฑํ๋ $v_p$๊ฐ 2๊ฐ ์์ผ๋ฏ๋ก $N^1_{PC} = 2$๊ฐ ๋ฉ๋๋ค!
์ด ์ ๋ณด๊ฐ ์๋ค๋ฉด, \(N^1_P[u, v]\)์ ๊ฐ์ $N^1_{PC}[u, v, u_p]$ ๊ฐ์ด 0์์ 1๋ก ๋ฐ๋ ๋๋ง ์ฆ๊ฐ์ํค๋ฉด ๋ฉ๋๋ค! (์ํธ!)
๋ง์ฝ \(N^1_{PC}[u, v, u_p]\) ๊ฐ์ด ์ฌ์ ํ 0์ด๊ฑฐ๋, $N^1_{PC}[u, v, u_p]$ ๊ฐ์ด ์ด๋ฏธ 1 ์ด์์ธ ์ํ์์ $D_1[u_p, v_p] = 1$์ธ $v_p$๊ฐ ์ถ๊ฐ๋๋ ๊ฑฐ๋ผ๋ฉด, $N^1_P[u, v]$๋ $D_1[u, v]$๋ ๊ฐ ๋ณ๊ฒฝ์ด ๋ฐ์ํ์ง ์์ต๋๋ค.
DCS ๊ทธ๋ํ์ $(<u_p, v_p>, <u, v>)$ ์ฃ์ง๊ฐ ์ฐ๊ฒฐ๋๋ ๊ฒฝ์ฐ ์ด๋ป๊ฒ $N^1_P$, \(N^1_{PC}\) ๊ฐ์ด ์ ๋ฐ์ดํธ ๋๋์ง ๋ค์ ์ดํด๋ด ์๋ค.
- ๋ง์ฝ $(<u_p, v_p>, <u, v>)$ ์ฃ์ง๊ฐ ์ด๋ฏธ ์์๋ค๋ฉด,
- ์ด๋ฏธ $N^1_{PC}, N^1_P, D_1$์ ๋ฐ์ ๋์ด ์์ต๋๋ค. ์ค๋ณต ๊ณ์ฐํ ํ์ ์๊ณ , ์ข ๋ฃ ํฉ๋๋ค.
- ๋ง์ฝ $D_1[u_p, v_p] = 0$ ์ด๋ผ๋ฉด,
- $N^1_{PC}[u, v, u_p]$์ ๊ฐ ์ฆ๊ฐ์ด ๋ฐ์ํ์ง ์์ต๋๋ค.
- $N^1_P[u, v]$ ์ฆ๊ฐ์ด ๋ฐ์ํ์ง ์์ ๊ฒ์ด๋, ๊ณผ์ ์ ์ข ๋ฃ ํฉ๋๋ค.
- ๋ง์ฝ $D_1[u_p, v_p] = 1$ ์ด๋ผ๋ฉด,
- $N^1_{PC}[u, v, u_p]$์ ๊ฐ์ 1 ์ฆ๊ฐ ์ํต๋๋ค.
- ๊ทธ๋ฐ๋ฐ, ์ด๊ฒ 0์์ 1๋ก ๋ฐ๋๋ ๊ฒฝ์ฐ๋ผ๋ฉด?
- ๊ทธ๋ฌ๋ฉด $N^1_P[u, v]$์ ๊ฐ์ 1 ์ฌ๋ ค์ค๋๋ค.
- ๊ทธ๋ฆฌ๊ณ $D_1[u, v]$ ๊ฐ๋ ์ฌ๊ณ์ฐ ํฉ๋๋ค.
- ๊ทธ๊ฒ ์๋๋ผ๋ฉด ๊ณผ์ ์ ์ข ๋ฃ ํฉ๋๋ค.
์ด ๊ณผ์ ์ ์ดํด๋ณด๋ฉด ๋์ด์ $C(u_p)$ ์งํฉ์ ์ํํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ $D_1$ ์ ๋ฐ์ดํธ์ $O(1)$ ์์ ์๊ฐ๋ง ๊ฑธ๋ฆฌ๊ฒ ๋ฉ๋๋ค! ๊ทธ๋ฆฌ๊ณ $N^1_P$, \(N^1_{PC}\)๋ ์์ ์๊ฐ์ผ๋ก ์ ๋ ๋ฉ๋๋ค!
D2 Child Array $N^2_C$
$D_1$์ ์์์๊ฐ์ผ๋ก ๊ณ์ฐํ๊ธฐ ์ํด ์ถ๊ฐ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋์ ํ๋ฏ, ๋ง์ฐฌ๊ฐ์ง๋ก $D_2$์ ๋ํด์๋ ์ถ๊ฐ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋์ ํฉ๋๋ค.
์ด๊ฒ์ $D_2$์ ๋ํด์๋ $D_2[u, v] = 0 \rightarrow 1$๋ก ๋ฐ๋๋ ์๊ฐ์ ๋ชจ๋ ์์ ๋ ธ๋ $u_c$์ ๋ํด์ $D_2[u_c, v_c] = 1$์ธ $v_c$๊ฐ ์กด์ฌํ ๋ ์ ๋๋ค.
# ์ค๋ช
์ ์ํด ์์๋ก ์์ฑํ ์ฝ๋ ์
๋๋ค.
num_child = get_child(u) # O(1)
num_D1_child = get_d2_child(u, v) # O(N * |C(u_c)|)
D2[u][v] = (num_child == num_D2_child) and D1[u][v]
$D_2[u, v]$๋ $D_1[u, v] = 1$์ธ์ง๋ ์ฒดํฌํด์ผ ํ๋ค๋ ๊ฒ๋ ์ ์ ํฉ๋๋ค.
get_d2_child(u, v)
๊ฐ์ ๋น ๋ฅด๊ฒ ๊ตฌํ๊ธฐ ์ํด์ $N^2_C[u, v]$ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋์
ํฉ๋๋ค.
์ด ์๋ฃ๊ตฌ์กฐ๋ DCS ์์ ์ค์์ $D_2[u_c, v_c] = 1$์ธ $v_c$๊ฐ ์กด์ฌํ๋, ์์ ๋
ธ๋์ ๊ฐฏ์๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด ์
๋๋ค.
# ์ค๋ช
์ ์ํด ์์๋ก ์์ฑํ ์ฝ๋ ์
๋๋ค.
num_child = get_child(u) # O(1)
num_D1_child = N2C[u][v] # O(1)
D2[u][v] = (num_child == num_D2_child) and D1[u][v]
๊ทธ๋ฐ๋ฐ, $N^2_C[u, v]$๋ฅผ ๊ณ์ฐํ๋ ๊ณผ์ ์์ $O(|C(u_c)|)$ ๋งํผ์ ๊ณ์ฐ ๋น์ฉ์ด ๋ค๊ณ , ์ด๋ฅผ ์์ ์๊ฐ์ผ๋ก ๋ฐ๊พธ๊ธฐ ์ํด (๊ฐ์ ๋ฐฉ์์ผ๋ก) ์ถ๊ฐ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋์ ํฉ๋๋ค.
D2 Child Candidate Array $N^2_{CC}$
๋ ผ๋ฌธ์์๋ \(N^2_{CC}[u, v, u_c]\)๊ฐ ์๋๋ผ $N_{u, v}^2[u_c]$๋ผ๊ณ ํ๊ธฐํ์ง๋ง, ์ ๋ ํ๊ธฐ๊ฐ ๋๋ฌด๋๋ฌด ํท๊ฐ๋ ค์ ์ด ๋ถ๋ถ๋ ์ ๋ง์ ํ๊ธฐ๋ก ์์ฑํ๊ฒ ์ต๋๋ค. $CC$๋ Child Candidate์ ์ฝ์ ์ ๋๋ค.
์ด ์๋ฃ๊ตฌ์กฐ๋ $<u, v>$์ ์์ ๋ ธ๋ $<u_c, v_c>$๊ฐ ์์ ๋, $D_2[u_c, v_c] = 1$์ ๋ง์กฑํ๋ $v_c$์ ๊ฐฏ์๋ฅผ ์ ์ฅํ๋ ์๋ฃ ๊ตฌ์กฐ ์ ๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ์ด ์ ๋ณด๊ฐ ์๋ค๋ฉด, $N^2_C[u, v]$์ ๊ฐ์ \(N^2_{CC}[u, v, u_c] = 0 \rightarrow 1\)๊ฐ ๋ ๋๋ง ์ฆ๊ฐ์ํค๋ฉด ๋ฉ๋๋ค.
์ ์ฒด๋ฅผ ์ ๋ฆฌํ๋ฉด, DCS ์ฃ์ง ์ถ๊ฐ ์ ๋ฐ์ดํธ์ธ $(<u, v>, <u_c, v_c>)$๊ฐ ์์ ๋ $N^2_C[u, v]$, \(N^2_{CC}[u, v, u_c]\)๋ ์ด๋ ๊ฒ ์ ๋ฐ์ดํธ ๋ฉ๋๋ค.
- ๋ง์ฝ $(<u, v>, <u_c, v_c>)$ ์ฃ์ง๊ฐ ์ด๋ฏธ ์์๋ฐ๋ฉด,
- ์ด๋ฏธ \(N^2_{CC}\), $N^2_C$, $D_2$์ ๋ฐ์ ๋์ด ์์ต๋๋ค. ๊ณผ์ ์ ์ข ๋ฃ ํฉ๋๋ค.
- ๋ง์ฝ $D_2[u_c, v_c] = 0$์ด๋ผ๋ฉด,
- ์ถ๊ฐ ์๋ฃ๊ตฌ์กฐ๋ค์ ๊ฐ ์ฆ๊ฐ์ด ๋ฐ์ํ์ง ์์ต๋๋ค. ๊ณผ์ ์ ์ข ๋ฃ ํฉ๋๋ค.
- ๋ง์ฝ $D_2[u_c, v_c] = 1$์ด๋ผ๋ฉด,
- \(N^2_{CC}[u, v, v_c]\) ๊ฐ์ 1 ์ฆ๊ฐ ์ํต๋๋ค.
- ๊ทธ๋ฐ๋ฐ, ์ด๊ฒ 0์์ 1๋ก ๋ฐ๋๋ ๊ฒฝ์ฐ๋ผ๋ฉด?
- ๊ทธ๋ฌ๋ฉด $N^2_C[u, v]$์ ๊ฐ์ 1 ์ฌ๋ ค์ค๋๋ค.
- ๊ทธ๋ฆฌ๊ณ $D_2[u, v]$์ ๊ฐ๋ ์ฌ๊ณ์ฐ ํฉ๋๋ค.
- ๊ทธ๊ฒ ์๋๋ผ๋ฉด ๊ณผ์ ์ ์ข ๋ฃ ํฉ๋๋ค.
Review the process with Paper
์ง๊ธ๊น์ง ์ ๋ฐฉ์์ผ๋ก ๊ฐ ์๋ฃ๊ตฌ์กฐ๊ฐ ์ ํ์ํ์ง, ๊ทธ๋ฆฌ๊ณ ์ ๋ฐ์ดํธ๊ฐ ์์ ๋ DCS ๊ฐ์ด ์ด๋ป๊ฒ ๋ฐ๋๋์ง ์ค๋ช ํ๋๋ฐ์! Symbi ๋ ผ๋ฌธ์์๋ ์ด๊ฒ์ ์๊ณ ๋ฆฌ์ฆ ์ฝ๋๋ก๋ ์ ์ํด์ค๋๋ค! ๊ฐ ์๊ณ ๋ฆฌ์ฆ ์ฝ๋์ ๋น๊ตํ๋ฉฐ ๋ค์ ์ดํด๋ด ์๋ค.
- ์ผ๋จ $D_1[u_p, v_p] = 1$์ด์ด์ผ ๋ค์ ๊ณผ์ ์ด ์งํ ๋ฉ๋๋ค. [A2-L5]
- \(N^1_{PC}[u_c, v_c, u] = 0\)์ด์ด์ผ $0 \rightarrow 1$๋ก ์ฆ๊ฐํ๋๊ฒ ๋๊ณ , $N^1_P$ ๊ฐ ์ฆ๊ฐ๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋์ ์ด๋ฅผ ์ฒดํฌ ํฉ๋๋ค. [A3-L1]
- $N^1_P$ ๊ฐ์ 1 ์ฆ๊ฐ ์ํต๋๋ค. [A3-L2]
- ๋ง์ฝ $N^1_P$ ๊ฐ์ด $u_c$์ ๋ถ๋ชจ ์ฟผ๋ฆฌ ๋ ธ๋ ๊ฐฏ์์ ๊ฐ์์ง ์ฒดํฌ ํฉ๋๋ค. [A3-L3]
- ๊ฐ๋ค๋ฉด $D_1$ ๊ฐ์ ์ ๋ ํฉ๋๋ค. [A3-L4]
- ์ด๋, $N^2_C[u_c, v_c]$์ ๋ํด์ $D_2 = 1$์ด ๋ ์กฐ๊ฑด์ ๊ฐ์ถ๊ณ ์์๋๋ฐ, $D_1[u_c, v_c]$๊ฐ 0์ด๋ผ์ $D_2 = 0$์ธ ์ํฉ์ด์๋ค๋ฉด, $D_2[u_c, v_c] = 1$๋ก ์ ๋ฐ์ดํธ ํด์ค๋๋ค.
ํ๊ธฐ๋ค์ ๋ค ์ดํดํ ํ์๋ ๋ ผ๋ฌธ์ ์๊ณ ๋ฆฌ์ฆ์ด ์์ ์ดํด๋๋ค (์๋ง๋โฆ ใ ใ )
์ด์ด์ $D_2$ ๊ฐ์ด ์ ๋ฐ์ดํธ ๋๋ ๊ณผ์ ๋ ์ดํด๋ณด์.
- ์ผ๋จ $D_2[u_c, v_c] = 1$์ด์ด์ผ ๋ค์ ๊ณผ์ ์ด ์งํ ๋ฉ๋๋ค. [A2-L7]
- \(N^2_{CC}[u_p, v_p, u] = 0 \rightarrow 1\)์ธ ์ํฉ์ด์ด์ผ $N^2_C$ ๊ฐ ์ฆ๊ฐ๊ฐ ๊ฐ๋ฅ ํฉ๋๋ค. [A4-L1]
- ๊ทธ๋ฆฌ๊ณ $D_2$๋ฅผ ์ ๋ ํ๊ธฐ ์ํด $D_1$์ $N^2_C$ ๊ฐ์ด ์์ ์ฟผ๋ฆฌ ๋ ธ๋ ๊ฐฏ์์ ๊ฐ์์ง ์ฒดํฌ ํฉ๋๋ค. [A4-L3]
- ๊ฐ๋ค๋ฉด, $D_2$ ๊ฐ์ ์ ๋ ํฉ๋๋ค. [A4-L4]
[A2-L9] ๋ถ๋ถ์ InsertionBottomUp()
ํจ์์ ํธ์ถ๋ก ์ธํด ๋ถ๋ชจ ๋
ธ๋์ $D_2[u_p, v_p] = 0 \rightarrow 1$๊ฐ ๋ ๊ฒฝ์ฐ๋ฅผ ํธ๋ค๋ง ํ๊ธฐ ์ํด ์กด์ฌํ๋ ๋ถ๋ถ ์
๋๋ค. ๋ง์ฝ ์ด ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ค๋ฉด, $N^2_{CC}[u_c, v_c, u]$์ ๊ฐ์ 1 ์ฆ๊ฐ ์ํต๋๋ค.
Handle $D_1$, $D_2$ Changed DCS Nodes
์ด ๊ณผ์ ์์ $D_1$์ด๋ $D_2$ ๊ฐ์ด ์ ๋ฐ์ดํธ ๋๋ค๋ฉด, ์ด๊ฒ์ ์ํฅ์ ๋ฐ์ ์์/๋ถ๋ชจ ๋ ธ๋์ $D_1$, $D_2$ ๊ฐ๋ $0 \rightarrow 1$์ด ๋ ๊ฐ๋ฅ์ฑ์ด ์กด์ฌํฉ๋๋ค. ๊ทธ๋์ ์ ๋ฐ์ดํธ ์คํธ๋ฆผ์ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์์ $D_1$, $D_2$ ๊ฐ ๋ณํ๊ฐ ์๋ DCS ๋ ธ๋๋ค์ ๋ชจ์์ ์ถ๊ฐ ์ฒ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.
๊ทธ๋์ ๋๋๊ฒ, $Q_1$, $Q_2$ ์ด๊ณ , ์ด๋ค์ ์๋์ DCS ๋ ธ๋๋ค์ ์ ์ฅํฉ๋๋ค.
- $Q_1$ stores $<u, v>$ s.t. $D_1[u, v] = 0 \rightarrow 1$
- $Q_2$ stores $<u, v>$ s.t. $D_2[u, v] = 0 \rightarrow 1$
๊ฐ์ฅ ๋จผ์ $Q_1$ ํ์ ์์๋ฅผ ๋น์๊ฐ๋ฉด์, ์์ ๋ ธ๋์ ๋ํด ์ถ๊ฐ์ ์ธ Parent Subgraph Matching์ด ๋ฐ์ํ๋์ง ์ฒดํฌ ํฉ๋๋ค. [A2-L11 ~ L14] ๊ทธ๋ฆฌ๊ณ ์ด ๊ณผ์ ์์ $D_1$ ๊ฐ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ฉด, $Q_1$์ ์ถ๊ฐ ์ฝ์ ์ด ๋ฐ์ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ $Q_2$ ํ์ ์์๋ฅผ ๋น์๊ฐ๋ฉด์, ๋ถ๋ชจ ๋ ธ๋์ ๋ํด ์ถ๊ฐ์ ์ธ Child Subgraph Matching์ด ๋ฐ์ํ๋์ง ์ฒดํฌ ํฉ๋๋ค. [A2-L15 ~ L20] ๋ง์ฐฌ๊ฐ์ง๋ก ์ด๋๋ $D_2$ ๊ฐ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ฉด, $Q_2$์ ์ถ๊ฐ ์ฝ์ ์ด ๋ฐ์ํฉ๋๋ค.
Edge Deletion
์ง๊ธ๊น์ง ์ฃ์ง ์ฝ์ ์ ๊ธฐ์ค์ผ๋ก ์ค๋ช ์ ํ์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ, CSM ๋ฌธ์ ๋ Negative Matching์ ์ฐพ๋ ๊ฒ๋ ์ํํฉ๋๋ค. ์ด๊ฒ์ ์ฝ์ ๋ ํ๋ ๊ฒ์ ๋ฐ๋๋ก ์ํ ํ๋ฉด ๋ฉ๋๋ค.
- ์ฃ์ง ์ญ์ ๋ก ์ํฅ ๋ฐ๋ Updated parent/child๋ฅผ ๋ชจ๋ ์ฐพ๋๋ค.
- $D_1$ ๋๋ $D_2$ ๊ฐ์ด 1์์ 0์ผ๋ก ๋ฐ๋๋ ๊ฒฝ์ฐ๋ฅผ ์ฐพ์ต๋๋ค.
๋งบ์๋ง
ํฌ์คํธ๋ฅผ ์ ์ผ๋ฉด์, ์ดํด๋ฅผ ์ฝ๊ฒ ํ๊ธฐ ์ํด์ SymBi ๋ ผ๋ฌธ์์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ์ํ๋ ์์๋ ํ๊ธฐ๋ฅผ ๋ฐ๊พผ ๊ฒ๋ค์ด ์ข ์์ต๋๋ค! ๊ทธ๋ฆฌ๊ณ ์ ๊ฐ ๋๋ฆ๋๋ก ์ดํดํ ๋ด์ฉ์ ์ ์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ถ์ ํํ ๋ด์ฉ์ด๋ ์ค๋ช ์ด ์์ ์๋ ์์ผ๋ ์ํด ๋ถํ๋๋ฆฝ๋๋ค!
์ด์ด์ง๋ ํฌ์คํธ์์๋ ์ด๋ ๊ฒ ์ ๋ฐ์ดํธํ DCS ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ฐํ์ผ๋ก Subgraph Matching์ ์ฐพ๋ โBacktrackingโ ๋ฐฉ๋ฒ์ ๋ํด ์ดํด๋ณด๊ฒ ์ต๋๋ค.
โก๏ธ Symbi, Find Matching