13 minute read

2025๋…„ ์ €๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋žฉ์— ์ปจํƒํ•˜์—ฌ ํ•™๋ถ€ ์กธ์—… ์—ฐ๊ตฌ ์ฃผ์ œ๋ฅผ ๋ฐ›์•„์„œ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ €์˜ ์ฃผ์ œ๋Š” โ€œContinuous Subgraph Matchingโ€๊ณผ ๊ด€๋ จํ•ด ์ฝ”๋“œ๋ฅผ ์ตœ์ ํ™” ํ•˜๊ณ  ๊ฐœ์„ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ทธ๋ž˜ํ”„ ์ฟผ๋ฆฌ ๊ด€๋ จ ๋…ผ๋ฌธ์„ ์ฝ๊ณ , C++ ์ฝ”๋“œ๋ฅผ ํŠœ๋‹ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์กธ์—… ๋งˆ์ง€๋ง‰ ํ•™๊ธฐ์— ๋“ฃ๋Š” ์ˆ˜์—…์ธ๋ฐ ๋งŽ์€ ๋…ธํ•˜์šฐ์™€ ๊ฒฝํ—˜์„ ์Œ“๊ณ  ์กธ์—…ํ•˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค ใ…Žใ…Ž

Dynamic Candidate Space (DCS)

โ€œDCSโ€๋Š” Symbi ๋…ผ๋ฌธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋กœ Weak Embedding์ด ์กด์žฌํ•  ๊ฒƒ ๊ฐ™์€ ํ›„๋ณด๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋…€์„ ์ž…๋‹ˆ๋‹ค.

DCS์— Weak Embedding์„ ์ฐพ๊ธฐ ์œ„ํ•ด ๊ณ„์‚ฐํ•˜๋Š” ๊ฐ์ข… ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ณ , ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ Backtracking ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•ด Weak Embedding์„ ์ฐพ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ์€ ๊ทธ๋ƒฅ ํ˜•ํƒœ๋งŒ ์‚ดํŽด๋ณด๋Š”๋ฐ, ํ–‰๋ ฌ์ด ๊ฐ ๋…ธ๋“œ๋ฅผ ์ด๋ฃจ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๊ตฌ์„ฑ์€ ์•„๋ž˜์˜ ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ์ •์˜๋ฅผ ์ดํ•ดํ•˜๋ฉด์„œ ์„ค๋ช… ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Candidate Set $C(u)$

์ฟผ๋ฆฌ ๊ทธ๋ž˜ํ”„์˜ ๋…ธ๋“œ $u$์™€ ๋ฐ์ดํ„ฐ ๊ทธ๋ž˜ํ”„์˜ ๋…ธ๋“œ $v$๊ฐ€ ๋งค์นญ์ด ๊ฐ€๋Šฅํ•œ ๋…ธ๋“œ ์Œ์„ ๋ชจ์€ ์ง‘ํ•ฉ ์ž…๋‹ˆ๋‹ค.

For each $u \in V(q)$, a set of vertices $v \in V(g)$ s.t.

\[l_q(u) = l_g(v)\]

, and represent a matching pair as $<u, v>$.

๋งค์นญ์ด ๊ฐ€๋Šฅํ•œ์ง€ ์—ฌ๋ถ€๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ๋‘ ๋…ธ๋“œ์˜ ๋ ˆ์ด๋ธ”์ด ๊ฐ™๋‹ค๋Š” ์กฐ๊ฑด๋งŒ ๋งŒ์กฑ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค!

DCS only $C(u)$

์ด $C(u)$๋ฅผ ์ •์˜ํ•˜๋Š” ์ด์œ ๋Š” ์ด๊ฒƒ๋“ค์„ ๊ฐ€์ง€๊ณ  DCS์˜ ๊ณจ๊ฒฉ์ด ๋˜๋Š” ๋…ธ๋“œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋…ผ๋ฌธ์—์„œ ๋‹ค๋ฅธ ๋ถ€๋ถ„์„ ๊ฑท์–ด๋‚ด๊ณ , $C(u)$์— ๋Œ€ํ•œ ๋ถ€๋ถ„๋งŒ ํ‘œํ˜„ํ•œ ๊ทธ๋ฆผ ์ž…๋‹ˆ๋‹ค.

์ด๊ฑธ ๋งŒ๋“ค์–ด๊ฐ€๋Š” ๊ณผ์ •์„ ๋”ฐ๋ผ๊ฐ€๋ด…์‹œ๋‹ค.

๋จผ์ €, ๊ธฐ์กด์˜ ์ฟผ๋ฆฌ ๊ทธ๋ž˜ํ”„ $q$์—์„œ ๊ฐ ๋…ธ๋“œ๋ฅผ $C(u)$๋กœ ๋Œ€์ฒด ํ•ด๋ด…์‹œ๋‹ค. ์ง€๊ธˆ์€ ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ๊ทธ๋ ค๋’€๋Š”๋ฐ์š”. DCS edge๋ฅผ ๊ทธ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ๋‹ค๋ฃจ๊ณ  ๋‹ค๋ฉด, ์ด๊ฒƒ๋“ค์„ ์ง€์šฐ๊ณ  ์–ด๋–ป๊ฒŒ ๊ทธ๋ฆฌ๋Š” ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

$C(u)$๋Š” $<u, v>$์˜ ์ง‘ํ•ฉ์œผ๋กœ ์ •์˜ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ ๊ทธ๋Œ€๋กœ ๊ทธ๋ž˜ํ”„๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์ด๋ ‡๊ฒŒ ๋  ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ๋ณด๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ๋ถˆํŽธํ•˜๊ณ , ๋ฐ˜๋ณต๋˜๋Š” ๋ถ€๋ถ„๋„ ๋งŽ์ด ๋ณด์ž…๋‹ˆ๋‹ค! ๊ทธ๋ž˜์„œ ์ง‘ํ•ฉ ํ‘œ๊ธฐ ๋Œ€์‹ ์— ํ‘œ์˜ ํ˜•ํƒœ๋กœ ํ‘œ๊ธฐ๋ฅผ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

๋“œ๋””์–ด! ๋…ผ๋ฌธ์— ๋‚˜์™”๋˜ DCS ๋‹ค์ด์–ด๊ทธ๋žจ๊ณผ ๋น„์Šทํ•œ ํ˜•ํƒœ๊ฐ€ ๋‚˜์™”์Šต๋‹ˆ๋‹ค! ใ…Žใ…Ž ์ด์ œ DCS ๊ทธ๋ž˜ํ”„์—์„œ ์—ฃ์ง€๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

DCS Edges

DCS ์ƒ์˜ ์—ฃ์ง€๋Š” ๋‘ $<u, v>, <uโ€™, vโ€™>$ ์Œ์ด ์—ฐ๊ฒฐ ๊ด€๊ณ„์— ์žˆ์Œ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋งค์นญ ์Œ์ด ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๋ ค๋ฉด ์•„๋ž˜์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • $(u, uโ€™) \in E(q)$
  • $(v, vโ€™) \in E(g)$

์ฆ‰, ๋งค์นญ ์Œ์„ ์ด๋ฃจ๋Š” ์ฟผ๋ฆฌ ๋…ธ๋“œ ์‚ฌ์ด์—๋„ ์—ฐ๊ฒฐ์„ฑ์ด ์žˆ์–ด์•ผ ํ•˜๊ณ , ๋ฐ์ดํ„ฐ ๋…ธ๋“œ ์‚ฌ์ด์—๋„ ์—ฐ๊ฒฐ์„ฑ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค!

์ด์ œ ๊ธฐ์กด์— ๊ฐ€์ด๋“œ๋ฅผ ์œ„ํ•ด ๊ทธ๋ ธ๋˜, $C(u)$ ๋…ธ๋“œ ์‚ฌ์ด์˜ ์—ฐ๊ฒฐ์„ฑ์„ ๋ชจ๋‘ ์ง€์šฐ๊ณ , DCS ์—ฃ์ง€ ์ •์˜์— ๋งž์ถฐ์„œ DCS๋ฅผ ๊ทธ๋ ค๋ด…์‹œ๋‹ค.

$B-B$ ์—ฃ์ง€๋งŒ์„ ์ฐพ์•„์„œ DCS ์—ฃ์ง€๋ฅผ ๊ทธ๋ฆฐ ๋ชจ์Šต ์ž…๋‹ˆ๋‹ค. ์ด๋•Œ, $(u_2, u_4)$ ์—ฃ์ง€์— ๋ฐฉํ–ฅ์„ฑ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์—ฃ์ง€๋ฅผ ๊ทธ๋ ค์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ €๋ ‡๊ฒŒ ๊ฐ„์„ ์ด 2๊ฐœ ์ƒ๊ธฐ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •์˜์— ๋”ฐ๋ผ ๋ชจ๋“  $(u, uโ€™)$ ์Œ์— ๋Œ€ํ•ด ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋Š” DCS Edge๋ฅผ ์ฐพ์•„์„œ ๊ทธ๋ ค์ค๋‹ˆ๋‹ค. ์ด๋•Œ, ์ฟผ๋ฆฌ ๊ทธ๋ž˜ํ”„์˜ ๋ฐฉํ–ฅ์„ฑ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด์„œ ์—ฃ์ง€๋ฅผ ๊ทธ๋ ค์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์— ์ฃผ์˜ ํ•ฉ๋‹ˆ๋‹ค.

์ •์˜์— ๋งž๊ฒŒ ๋ชจ๋“  Edge๋ฅผ ๊ทธ๋ ค์ฃผ๋ฉด SymBi ๋…ผ๋ฌธ์— ๋‚˜์˜จ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


ํ•˜๋‚˜ ์‰ฝ๊ฒŒ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์‚ฌ์ดํŠธ๋Š”,

๋งŒ์•ฝ ์„œ๋กœ ์—ฐ๊ฒฐ๋œ ๋‘ ์ฟผ๋ฆฌ ๋…ธ๋“œ $(u, uโ€™) \in E(q)$์— ๋Œ€ํ•ด์„œ $C(u)$์™€ $C(uโ€™)$ ์‚ฌ์ด์— DCS ์—ฃ์ง€๊ฐ€ ํ•˜๋‚˜๋„ ์—†๋‹ค๋ฉด!
์–ด๋–ค Subgraph Matching๋„ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค

๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ์ด๊ฒƒ์€ ์ฟผ๋ฆฌ ๊ทธ๋ž˜ํ”„์—์„œ ์žˆ๋˜ ์—ฃ์ง€ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ์ดํ„ฐ ๊ทธ๋ž˜ํ”„์—์„œ ๋ฐœ๊ฒฌ ๋˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.


๊ทธ๋ ‡๋‹ค๊ณ , ๋ชจ๋“  ์ฟผ๋ฆฌ ์—ฃ์ง€ $(u, uโ€™) \in E(q)$์— ๋Œ€ํ•ด $(C(u), C(uโ€™)) \in E(\text{DCS})$๋ผ๊ณ  ํ•ด์„œ Subgraph Matching์ด ์กด์žฌํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

Subgraph Matching์ด ์กด์žฌํ•˜๊ธฐ ์œ„ํ•ด์„  ์ถ”๊ฐ€์ ์ธ ์กฐ๊ฑด์ด ํ•„์š”ํ•˜๋ฉฐ, ์ด ์กฐ๊ฑด์„ ์ฒดํฌํ•˜์—ฌ ์ €์žฅํ•˜๋Š” ์ค‘๊ฐ„ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ์•ž์œผ๋กœ ์†Œ๊ฐœํ•  $D_0$, $D_1$, $D_2$ Matrix ์ž…๋‹ˆ๋‹ค.

$D_0$ Matrix

์ฃผ์˜! ์ด $D_0$ Matrix๋Š” SymBi ๋…ผ๋ฌธ์—๋Š” ๋“ฑ์žฅํ•˜์ง€ ์•Š๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ์ž…๋‹ˆ๋‹ค! ์ œ๊ฐ€ ์ดํ•ด์™€ ์„ค๋ช…์˜ ํŽธ์˜๋ฅผ ์œ„ํ•ด์„œ ์ž„์˜๋กœ ์ •์˜ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ์ž…๋‹ˆ๋‹ค!

$D_0$ Matrix๋Š” $<u, v>$ ๋งค์นญ ์Œ์— True/False ๊ฐ’์„ ๋ถ€์—ฌํ•œ ํ–‰๋ ฌ ์ž…๋‹ˆ๋‹ค.

์ด ํ–‰๋ ฌ์€ ์ฟผ๋ฆฌ DAG $\hat{q}$์—์„œ $u$๋ฅผ root๋กœ ์‚ผ๋Š” sub-DAG $\hat{q}_u$๊ฐ€ ๋ฐ์ดํ„ฐ ๋…ธ๋“œ $v$๋ฅผ ๊ธฐ์ค€์œผ๋กœ Weak Embedding์ด ์กด์žฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•ด ๊ธฐ๋ก ํ•ฉ๋‹ˆ๋‹ค.

$D_0$ ๊ฐ’์„ ๊ฐ€์žฅ ๊ตฌํ•˜๊ธฐ ์‰ฌ์šด ๊ฒƒ๋“ค์€ ์ฟผ๋ฆฌ DAG $\hat{q}$์˜ ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ์ด๋ฃจ๋Š” ์ฟผ๋ฆฌ ๋…ธ๋“œ๋“ค์ž…๋‹ˆ๋‹ค. ์ด๋“ค์€ ์ž์‹ ๋…ธ๋“œ๋“ค์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ž๊ธฐ ์ž์‹ ์— ๋Œ€ํ•ด์„œ๋งŒ ์ฒดํฌํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

SymBi ๋…ผ๋ฌธ์˜ ์ฟผ๋ฆฌ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋ฉด, $u_5(A)$ ๋…ธ๋“œ๊ฐ€ ๋ฆฌํ”„ ๋…ธ๋“œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋ฆฌํ”„ ๋…ธ๋“œ๋Š” ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๊ณ , ๋”ฐ๋ผ์„œ sub-DAG $\hat{q}_{u_5}$์— ๋Œ€ํ•ด ๋ชจ๋“  ์„œ๋ธŒ ๊ทธ๋ž˜ํ”„ ๋งค์นญ์ด ์กด์žฌํ•œ๋‹ค๊ณ  ํŒ๋‹จ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ $D_0[u_5]$ ๊ฐ’์€ 1๋กœ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ sub-DAG $\hat{q}_{u_4}$์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๋…€์„์€ ๋ฐ์ดํ„ฐ ๋…ธ๋“œ $v_3$๋ฅผ ๋ฃจํŠธ๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ์™€ $v_6$๋ฅผ ๋ฃจํŠธ๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•ด์„œ subgraph weak embedding์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ $D_0[u_4, v_3] = D_0[u_4, v_6] = 1$์ด ๋ฉ๋‹ˆ๋‹ค.

์ด๋•Œ, $D_0[u, v] = 1$์ด ๋˜๋Š”์ง€ ์‰ฝ๊ฒŒ ํŒ๋‹จํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, $D_0[u, v]$์™€ ์—ฐ๊ฒฐ๋œ DCS Edge $(<u, v>, <uโ€™, vโ€™>)$ ์ค‘์— $D_0[uโ€™, vโ€™] = 1$์„ ๋งŒ์กฑํ•˜๋Š” DCS ๋…ธ๋“œ๊ฐ€ ์ ์–ด๋„ ํ•˜๋‚˜ ์กด์žฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ, (1) ์—ฐ๊ฒฐ๋œ DCS ๋…ธ๋“œ๊ฐ€ ์—†๊ฑฐ๋‚˜ (2) ์—ฐ๊ฒฐ๋œ DCS ๋…ธ๋“œ ์ „๋ถ€๊ฐ€ $D_0[uโ€™, vโ€™] = 0$์ด๋ผ๋ฉด, $D_0[u, v] = 0$์ด ๋ฉ๋‹ˆ๋‹ค.


์ด๊ฑธ SymBi ๋…ผ๋ฌธ์—์„œ ์ •์˜ํ•œ ๋ฐฉ์‹์œผ๋กœ ์˜ฎ๊ฒจ ์ ์œผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

For each $u \in V(q)$ and $v \in V(g)$

  • $D_0[u, v] = 1$ if there exists a weak embedding $Mโ€™$ of sub-DAG $\hat{q}_u$ at $v$.
  • $D_0[u, v] = 0$ otherwise

์ด๊ฑธ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์„ ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ ์ œ๊ฐ€ ์ž„์˜๋กœ ์ž‘์„ฑํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ ๋…ผ๋ฌธ์˜ ๊ตฌํ˜„๊ณผ๋Š” ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

def fill_D0_matrix(u: QueryNode, v: DataNode):
  # Not DCS Node
  if not D0[u] or not D0[u][v]:
    return

  if isLeaf(u):
    D0[u][v] = 1

  for dcs_c in DCS[u][v].children():
    u_c, v_c = dcs_c
    if D0[u_c][v_c]:
      # if there exist, D0 mapping
      D0[u][v] = 1
      return

  D0[u][v] = 0

์ด๋•Œ, fill_D0_matrix(u, v) ํ•จ์ˆ˜๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๊ทธ๋“ค์˜ ๋ถ€๋ชจ ๋…ธ๋“œ ์ˆœ์„œ๋Œ€๋กœ ์˜ฌ๋ผ๊ฐ€๋ฉฐ ํ˜ธ์ถœํ•ด์•ผ ๋จ์„ ์œ ์˜ํ•˜์ž.

$D_1$ Matrix

$D_1$ Matrix๋„ $D_0$ Matrix์™€ ๋™์ผํ•˜๊ฒŒ $<u, v>$ ๋งค์นญ ์Œ์— True/False ๊ฐ’์„ ๋ถ€์—ฌํ•œ ํ–‰๋ ฌ ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ, ์ด ํ–‰๋ ฌ์€ ์ฟผ๋ฆฌ DAG $\hat{q}$๊ฐ€ ์•„๋‹Œ ์—ญ๋ฐฉํ–ฅ DAG์ธ $\hat{q}^{-1}$๋ฅผ ๊ธฐ์ค€์œผ๋กœ Weak Embedding์ด ์กด์žฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•ด ๊ธฐ๋ก ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฑธ ์‰ฝ๊ฒŒ ํ’€์–ด์„œ ์ ์œผ๋ฉด,

  • $D_0$๋Š” โ€œ์ˆœ๋ฐฉํ–ฅ DAGโ€œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์—
    • โ€œ์ž์‹ ๋…ธ๋“œโ€œ๋“ค์— ๋Œ€ํ•ด Weak Embedding์ด ์กด์žฌํ•˜๋Š”์ง€ ํŒ๋‹จํ•œ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ์ด๊ณ ,
  • $D_1$์€ ์—ญ๋ฐฉํ–ฅ DAG๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์—
    • โ€œ๋ถ€๋ชจ ๋…ธ๋“œโ€œ๋“ค์— ๋Œ€ํ•ด Weak Embedding์ด ์กด์žฌํ•˜๋Š”์ง€ ํŒ๋‹จํ•œ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.


$D_0$์—์„œ๋Š” ์ฟผ๋ฆฌ DAG $\hat{q}$์˜ ๋ฆฌํ”„ ๋…ธ๋“œ๋ถ€ํ„ฐ ๊ฐ’์„ ์ฑ„์›Œ๋‚˜๊ฐ”์Šต๋‹ˆ๋‹ค. $D_1$๋Š” ๋ฐ˜๋Œ€๋กœ ์ฟผ๋ฆฌ DAG $\hat{q}$์˜ ๋ฃจํŠธ ๋…ธ๋“œ๋ถ€ํ„ฐ ๊ฐ’์„ ์ฑ„์šฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋ฃจํŠธ ๋…ธ๋“œ์ธ $u_1$์— ๋Œ€ํ•ด ์—ญ๋ฐฉํ–ฅ DAG $\hat{q}^{-1}_{u_1}$์—์„œ์˜ subgraph weak embedding์€ ํ•ญ์ƒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๋ชจ๋“  $D_1[u_1]$์€ 1๋กœ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค.

์ด๊ฑธ ์ˆœ๋ฐฉํ–ฅ DAG์˜ ๋ฃจํŠธ๋…ธ๋“œ๋ถ€ํ„ฐ ์ž์‹ ๋…ธ๋“œ๋“ค ์ˆœ์„œ๋กœ $D_1$์„ ๊ณ„์‚ฐํ•˜๋ฉด์„œ ์ฑ„์›Œ๋‚˜๊ฐ€๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด $D_1$ ๊ฐ’์ด ์ฑ„์›Œ์ง„ DCS ๊ทธ๋ž˜ํ”„๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ด๊ฑธ SymBi ๋…ผ๋ฌธ์—์„œ ์ •์˜ํ•œ ๋ฐฉ์‹์œผ๋กœ ์˜ฎ๊ฒจ ์ ์œผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

For each $u \in V(q)$ and $v \in V(g)$

  • $D_1[u, v] = 1$ if there exists a weak embedding $Mโ€™$ of sub-DAG $\hat{q}^{-1}_u$ at $v$.
  • $D_1[u, v] = 0$ otherwise

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ python ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

def fill_D1_matrix(u: QueryNode, v: DataNode):
  # Not DCS Node
  if not D1[u] or not D1[u][v]:
    return

  if isRoot(u):
    D1[u][v] = 1

  for dcs_c in DCS[u][v].parent():
    u_c, v_c = dcs_c
    if D1[u_c][v_c]:
      # if there exist, D1 mapping
      D1[u][v] = 1
      return

  D1[u][v] = 0

$D_2$ Matrix

๋งˆ์ง€๋ง‰์œผ๋กœ $D_2$ Matrix ์ž…๋‹ˆ๋‹ค. $D_2$๋Š” Subgraph Matching์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์ง์ ‘์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ค‘์š”ํ•œ ๋…€์„ ์ž…๋‹ˆ๋‹ค.

$D_2$๋Š” ์ˆœ๋ฐฉํ–ฅ DAG $\hat{q}$๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฐ’ ์ž…๋‹ˆ๋‹ค. $D_0$๋ž‘ ๋น„์Šทํ•˜์ฃ . ํ•˜์ง€๋งŒ ์ถ”๊ฐ€์ ์ธ ์กฐ๊ฑด์ด ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. ๋ฐ”๋กœ

  1. $D_1[u, v] = 1$
    1. $D_2$๋ฅผ ํ‰๊ฐ€ํ•˜๋Š” ๋ฐ”๋กœ ๊ทธ ์ง€์  $<u, v>$์—์„œ parent subgraph mapping์ด ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค.
  2. For every child $u_c$ of $u$ in $\hat{q}$, there exist $v_c$ s.t. adjacent to $v$ and $D_2[u_c, v_c] = 1$.


์ €๋Š” $D_2$๊ฐ€ ์ข€ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์›Œ์„œ $D_0$๋ผ๋Š” ๋…ผ๋ฌธ์— ์—†๋Š” ๋…€์„์„ ์ถ”๊ฐ€๋กœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” $D_2[u, v] = 1$์ด ๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ ์–ด๋„ $D_0[u, v] = D_1[u, v] = 1$์ด ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ $<u, v>$์— ๋Œ€ํ•ด์„œ child subgraph ๋งคํ•‘๋„ ์กด์žฌํ•˜๊ณ , parent subgraph ๋งคํ•‘๋„ ์กด์žฌํ•ด์•ผ ์šฐ๋ฆฌ๊ฐ€ ์›๋ž˜ ์ฐพ๊ณ ์ž ํ–ˆ๋˜ Weak Embedding์ด ์กด์žฌํ•˜๋Š” ์ตœ์†Œ ์กฐ๊ฑด์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ, ์ถ”๊ฐ€ ์กฐ๊ฑด์„ ๋„ฃ์–ด์„œ ์ €๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์˜ํ•˜์˜€์Šต๋‹ˆ๋‹ค. (์ œ ์ •์˜์ด๋ฏ€๋กœ ํ‹€๋ฆฐ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.)

  1. $D_1[u, v] = D_0[u, v] = 1$์„ ๋งŒ์กฑํ•˜๊ณ 
  2. ๋ชจ๋“  ๋ถ€๋ชจ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ, $D_1[u_p, v_p] = D_0[u_p, v_p] = 1$๋ฅผ ๋งŒ์กฑํ•˜๊ณ 
  3. ๋ชจ๋“  ์ž์‹ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ, $D_1[u_c, v_c] = D_0[u_c, v_c] = 1$๋ฅผ ๋งŒ์กฑํ•œ๋‹ค๋ฉด

$D_2[u, v ] = 1$์ด ๋œ๋‹ค.

Find Subgraph Matching

์ด์ œ DCS ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ๋Š” $C(u)$, $D_1$, $D_2$ ๊ฐ’์„ ๋ชจ๋‘ ๊ตฌ์„ฑ ํ–ˆ์œผ๋‹ˆ, ์ž๋ฃŒ ๊ตฌ์กฐ ์ดˆ๊ธฐํ™”๋ฅผ ์™„๋ฃŒํ•œ ๊ฒƒ ์ž…๋‹ˆ๋‹ค! (์•ผํ˜ธ!)

์ด์ œ ์ด DCS ์ž๋ฃŒ ๊ตฌ์กฐ์—์„œ Subgraph Matching์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ•์€ ๋‹จ์ˆœํ•œ Graph ํƒ์ƒ‰์„ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ์ด๋•Œ ํƒ์ƒ‰ํ•˜๋Š” DCS ๋…ธ๋“œ์˜ $D_2[u, v] = 1$์„ ๋งŒ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” $D_2[u, v] = 1$์„ ๋งŒ์กฑํ•˜๋Š” ๋…ธ๋“œ๋งŒ ํƒ์ƒ‰ํ•  ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

$D_2[u, v] = 1$์„ ๋งŒ์กฑํ•˜๋Š” DCS ๋…ธ๋“œ๋งŒ ๋ชจ์•„์„œ backtracking์„ ํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์„ ํ–ˆ๋Š”๋ฐ, ์ „์ฒด $V(q)$๋ฅผ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ๊ทธ๋Ÿผ Subgraph Matching์ด ์กด์žฌํ•˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค!

๋งบ์Œ๋ง

์ด์–ด์ง€๋Š” ํฌ์ŠคํŠธ์—์„œ๋Š” ์—…๋ฐ์ดํŠธ ์ŠคํŠธ๋ฆผ $\Delta o_i$๊ฐ€ ๋“ค์–ด์˜ฌ ๋•Œ, ๊ตฌ์ถ•ํ•œ DCS ์ž๋ฃŒ๊ตฌ์กฐ์˜ $D_1$, $D_2$ ๊ฐ’์„ ์–ด๋–ป๊ฒŒ ์—…๋Žƒ ํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

โžก๏ธ Symbi, Update DCS

๋ณด์ถฉ

์ œ๊ฐ€ ๋…ผ๋ฌธ์„ ์ฝ์œผ๋ฉด์„œ ๊ณ„์† ํ—ท๊ฐˆ๋ ธ์–ด์„œ ๋ฉ”๋ชจ๋ฅผ ๋‚จ๊ฒจ๋‘ก๋‹ˆ๋‹ค.

โ€œDCS ๊ทธ๋ž˜ํ”„์˜ ๋…ธ๋“œ๋Š” $<u, v>$ ์ž…๋‹ˆ๋‹คโ€. Symbi ๋…ผ๋ฌธ์˜ ๋‹ค์ด์–ด๊ทธ๋žจ๊ณผ ์ œ๊ฐ€ ์„ค๋ช…์„ ํ•  ๋•Œ, $C(u)$๊ฐ€ ๋…ธ๋“œ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์„ค๋ช…ํ•˜๊ฑฐ๋‚˜, $C(u), D_1[u], D_2[u]$๊ฐ€ ํ•จ๊ป˜ ์žˆ๋Š” ํ‘œ๊ฐ€ DCS ๊ทธ๋ž˜ํ”„์˜ ๋…ธ๋“œ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์„ค๋ช…ํ–ˆ์ง€๋งŒ, ๋ณธ์งˆ์„ ๋ณธ๋‹ค๋ฉด, $<u, v>$๊ฐ€ DCS์˜ ๋…ธ๋“œ ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  DCS ์ƒ์—์„œ ๋ถ€๋ชจ ๋…ธ๋“œ๋ผ๊ณ  ํ•œ๋‹ค๋ฉด, $<u_p, v_p>$๊ฐ€ $<u, v>$ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋ผ๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ $(u_p, u) \in E(q)$์ด๊ณ , $\hat{q}$์—์„œ๋Š” $u_p$๊ฐ€ $u$์˜ ๋ถ€๋ชจ๋…ธ๋“œ๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. $(v_p, v) \in E(g)$์ธ๋ฐ, ๋ฐ์ดํ„ฐ ๋…ธ๋“œ ์‚ฌ์ด์—๋Š” ๊ทธ๋ƒฅ ์—ฐ๊ฒฐ์„ฑ๋งŒ ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.