17 minute read

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}}$๋ฅผ ์ฐพ์•„๋‚ด๋Š” ๊ฒƒ์ด ์ฒซ๋ฒˆ์งธ๋กœ ํ•  ์ผ ์ž…๋‹ˆ๋‹ค.

  1. Get newly inserted edge $e = (v, vโ€™)$.
  2. Traverses the query graph $q$ and find an edge $(u, uโ€™)$ s.t.
    1. $l_q(u) = l_g(v)$ and
    2. $l_q(uโ€™) = l_g(vโ€™)$
  3. 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]$์— ๋Œ€ํ•ด์„œ ์ด๊ฒŒ ์ฒ˜์Œ์œผ๋กœ 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 ๋…ผ๋ฌธ์—์„œ๋Š” ์ด๊ฒƒ์„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋“œ๋กœ๋„ ์ œ์‹œํ•ด์ค๋‹ˆ๋‹ค! ๊ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋“œ์™€ ๋น„๊ตํ•˜๋ฉฐ ๋‹ค์‹œ ์‚ดํŽด๋ด…์‹œ๋‹ค.

  1. ์ผ๋‹จ $D_1[u_p, v_p] = 1$์ด์–ด์•ผ ๋‹ค์Œ ๊ณผ์ •์ด ์ง„ํ–‰ ๋ฉ๋‹ˆ๋‹ค. [A2-L5]
  2. \(N^1_{PC}[u_c, v_c, u] = 0\)์ด์–ด์•ผ $0 \rightarrow 1$๋กœ ์ฆ๊ฐ€ํ•˜๋Š”๊ฒŒ ๋˜๊ณ , $N^1_P$ ๊ฐ’ ์ฆ๊ฐ€๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฅผ ์ฒดํฌ ํ•ฉ๋‹ˆ๋‹ค. [A3-L1]
  3. $N^1_P$ ๊ฐ’์„ 1 ์ฆ๊ฐ€ ์‹œํ‚ต๋‹ˆ๋‹ค. [A3-L2]
  4. ๋งŒ์•ฝ $N^1_P$ ๊ฐ’์ด $u_c$์˜ ๋ถ€๋ชจ ์ฟผ๋ฆฌ ๋…ธ๋“œ ๊ฐฏ์ˆ˜์™€ ๊ฐ™์€์ง€ ์ฒดํฌ ํ•ฉ๋‹ˆ๋‹ค. [A3-L3]
  5. ๊ฐ™๋‹ค๋ฉด $D_1$ ๊ฐ’์„ ์—…๋Žƒ ํ•ฉ๋‹ˆ๋‹ค. [A3-L4]
  6. ์ด๋•Œ, $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$ ๊ฐ’์ด ์—…๋ฐ์ดํŠธ ๋˜๋Š” ๊ณผ์ •๋„ ์‚ดํŽด๋ณด์ž.

  1. ์ผ๋‹จ $D_2[u_c, v_c] = 1$์ด์–ด์•ผ ๋‹ค์Œ ๊ณผ์ •์ด ์ง„ํ–‰ ๋ฉ๋‹ˆ๋‹ค. [A2-L7]
  2. \(N^2_{CC}[u_p, v_p, u] = 0 \rightarrow 1\)์ธ ์ƒํ™ฉ์ด์–ด์•ผ $N^2_C$ ๊ฐ’ ์ฆ๊ฐ€๊ฐ€ ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค. [A4-L1]
  3. ๊ทธ๋ฆฌ๊ณ  $D_2$๋ฅผ ์—…๋Žƒ ํ•˜๊ธฐ ์œ„ํ•ด $D_1$์™€ $N^2_C$ ๊ฐ’์ด ์ž์‹ ์ฟผ๋ฆฌ ๋…ธ๋“œ ๊ฐฏ์ˆ˜์™€ ๊ฐ™์€์ง€ ์ฒดํฌ ํ•ฉ๋‹ˆ๋‹ค. [A4-L3]
  4. ๊ฐ™๋‹ค๋ฉด, $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์„ ์ฐพ๋Š” ๊ฒƒ๋„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‚ฝ์ž… ๋•Œ ํ–ˆ๋˜ ๊ฒƒ์„ ๋ฐ˜๋Œ€๋กœ ์ˆ˜ํ–‰ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  1. ์—ฃ์ง€ ์‚ญ์ œ๋กœ ์˜ํ–ฅ ๋ฐ›๋Š” Updated parent/child๋ฅผ ๋ชจ๋‘ ์ฐพ๋Š”๋‹ค.
  2. $D_1$ ๋˜๋Š” $D_2$ ๊ฐ’์ด 1์—์„œ 0์œผ๋กœ ๋ฐ”๋€Œ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

๋งบ์Œ๋ง

ํฌ์ŠคํŠธ๋ฅผ ์ ์œผ๋ฉด์„œ, ์ดํ•ด๋ฅผ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ SymBi ๋…ผ๋ฌธ์—์„œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ œ์‹œํ•˜๋Š” ์ˆœ์„œ๋‚˜ ํ‘œ๊ธฐ๋ฅผ ๋ฐ”๊พผ ๊ฒƒ๋“ค์ด ์ข€ ์žˆ์Šต๋‹ˆ๋‹ค! ๊ทธ๋ฆฌ๊ณ  ์ œ๊ฐ€ ๋‚˜๋ฆ„๋Œ€๋กœ ์ดํ•ดํ•œ ๋‚ด์šฉ์„ ์ ์€ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€์ •ํ™•ํ•œ ๋‚ด์šฉ์ด๋‚˜ ์„ค๋ช…์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ ์–‘ํ•ด ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

์ด์–ด์ง€๋Š” ํฌ์ŠคํŠธ์—์„œ๋Š” ์ด๋ ‡๊ฒŒ ์—…๋ฐ์ดํŠธํ•œ DCS ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ Subgraph Matching์„ ์ฐพ๋Š” โ€œBacktrackingโ€ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

โžก๏ธ Symbi, Find Matching