Lexical Analysis Part 2

COMP321 Compiler โ€” Lexical Analysis Part 2

Kyungpook National University | Hwisoo So | Spring 2026


๐Ÿ“‹ 1ํŽ˜์ด์ง€ โ€” ์ œ๋ชฉ

Lexical Analysis โ€“ Part 2

์–ดํœ˜ ๋ถ„์„ โ€“ 2๋ฒˆ์งธ ํŒŒํŠธ

์ปดํŒŒ์ผ๋Ÿฌ์˜ Lexical Analysis(์Šค์บ๋„ˆ ๋‹จ๊ณ„) ๋‘ ๋ฒˆ์งธ ๊ฐ•์˜.
Part 1์—์„œ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ๋‹ค๋ค˜๊ณ , ์ง€๊ธˆ๋ถ€ํ„ฐ๋Š” ์ž๋™์ž(Automata) + ์ •๊ทœํ‘œํ˜„์‹ + DFA/NFA ๋ณ€ํ™˜์œผ๋กœ ๋“ค์–ด๊ฐ„๋‹ค.

  • Hwisoo So โ†’ ์†Œํœ˜์ˆ˜ (๊ต์ˆ˜ ์ด๋ฆ„)
  • Kyungpook National University โ†’ ๊ฒฝ๋ถ๋Œ€ํ•™๊ต
  • COMP321 Compiler / Spring 2026 โ†’ ์ปดํŒŒ์ผ๋Ÿฌ ๊ณผ๋ชฉ / 2026๋…„ ๋ด„ํ•™๊ธฐ

๐Ÿ“‹ 2ํŽ˜์ด์ง€ โ€” Outline (๊ฐ•์˜ ๊ฐœ์š”)

The role of a scanner โœ”

์Šค์บ๋„ˆ์˜ ์—ญํ• 

  • scanner = lexical analyzer
  • ์—ญํ• : ๋ฌธ์ž ์ŠคํŠธ๋ฆผ โ†’ ํ† ํฐ
  • ์ด๋ฏธ ์ด์ „ ์‹œ๊ฐ„์— ๋‹ค๋ฃธ (โœ” ํ‘œ์‹œ)

Scanner concepts โœ”

์Šค์บ๋„ˆ ๊ฐœ๋…

Tokens, Lexemes, Patterns

  • Token: ํƒ€์ž… (ex: IDENTIFIER, NUMBER)
  • Lexeme: ์‹ค์ œ ๋ฌธ์ž์—ด (ex: โ€œabcโ€, โ€œ123โ€)
  • Pattern: ์ •๊ทœ์‹์œผ๋กœ ์ •์˜๋œ ๊ทœ์น™

Regular Expression & Automata (to be continuedโ€ฆ)

์ •๊ทœํ‘œํ˜„์‹๊ณผ ์˜คํ† ๋งˆํƒ€ (๊ณ„์† ์ง„ํ–‰ ์ค‘)
์ง€๊ธˆ๋ถ€ํ„ฐ ํ•ต์‹ฌ ํŒŒํŠธ ์‹œ์ž‘: ์ •๊ทœํ‘œํ˜„์‹ โ†’ NFA โ†’ DFA โ†’ ์ตœ์†Œํ™”

ํ•ญ๋ชฉ ์ƒํƒœ
Definitions of REs, DFAs and NFAs โœ” ์™„๋ฃŒ
REs โ†’ NFA (Thompson Construction) โœ” ์™„๋ฃŒ
NFA โ†’ DFA (Subset Construction) โ† ์ด๋ฒˆ ํ•ต์‹ฌ
DFA โ†’ minimal-state DFA ๋‹ค์Œ ์ฃผ์ œ
Scanner generators (lex/flex) ์ดํ›„

Todayโ€™s agenda

  • NFA โ†’ DFA
  • DFA ์ตœ์†Œํ™”

์ด ๋‘ ๊ฐœ๊ฐ€ ์˜ค๋Š˜์˜ ํ•ต์‹ฌ์ด๋‹ค.


๐Ÿ“‹ 3ํŽ˜์ด์ง€ โ€” Subset Construction (NFAโ†’DFA ํ•ต์‹ฌ ๊ฐœ๋…)

Subset Construction (NFAโ†’DFA)

๋ถ€๋ถ„์ง‘ํ•ฉ ๊ตฌ์„ฑ๋ฒ• (NFA๋ฅผ DFA๋กœ ๋ณ€ํ™˜)

๋ฌธ์ œ: NFA์˜ ๋น„๊ฒฐ์ •์„ฑ

โ€œInstead of guessing in state s1 on symbol aโ€
์ƒํƒœ s1์—์„œ ์ž…๋ ฅ a์— ๋Œ€ํ•ด ์ถ”์ธกํ•˜๋Š” ๋Œ€์‹ 

NFA๋Š” ๊ฐˆ๋ฆผ๊ธธ์ด ์žˆ๋‹ค (๋น„๊ฒฐ์ •์ ):

  • a ์ฝ์œผ๋ฉด: s1 โ†’ s1 ๋˜๋Š” s1 โ†’ s2
  • ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ฅผ โ€œguessโ€ ํ•ด์•ผ ํ•จ โ†’ ๋ฌธ์ œ

ํ•ด๊ฒฐ: ๋‘ ์ „์ด๋ฅผ ๋™์‹œ์— ๋”ฐ๋ผ๊ฐ„๋‹ค

โ€œwe can follow both transitions in parallelโ€
๋‘ ์ „์ด๋ฅผ ๋™์‹œ์— ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค

  • ํ•˜๋‚˜๋งŒ ์„ ํƒ โŒ
  • ๋‘˜ ๋‹ค ๋™์‹œ์— ์ถ”์  โœ…

๊ฐ€์ƒ ์ƒํƒœ ๋„์ž…

โ€œWe introduce a virtual stateโ€
์šฐ๋ฆฌ๋Š” โ€œ๊ฐ€์ƒ ์ƒํƒœโ€๋ฅผ ๋„์ž…ํ•œ๋‹ค

DFA์—์„œ์˜ ์ƒํƒœ = NFA ์ƒํƒœ๋“ค์˜ ์ง‘ํ•ฉ
์˜ˆ: {s1, s2} โ†’ ์ด๊ฒŒ ํ•˜๋‚˜์˜ DFA ์ƒํƒœ๊ฐ€ ๋จ

์งˆ๋ฌธ๊ณผ ๋‹ต

โ€œif we are in {s1, s2}, where can we go on b?โ€
{s1, s2} ์ƒํƒœ์—์„œ b๋ฅผ ์ฝ์œผ๋ฉด ์–ด๋””๋กœ ๊ฐ€๋Š”๊ฐ€?

๊ฐ ์ƒํƒœ์—์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ณณ์„ ํ•ฉ์นœ๋‹ค:

  • s1 โ†’ s1
  • s2 โ†’ s3
  • ๊ฒฐ๊ณผ: {s1, s3}

๊ทธ๋ฆผ ์„ค๋ช… (ํ•˜๋‹จ)

  • NFA์—์„œ s1์—์„œ a๋กœ ๊ฐˆ ๋•Œ ๋‘ ๊ฐˆ๋ž˜ ์กด์žฌ
  • ์˜ˆ์‹œ 1 (์„ฑ๊ณต): โ€œabbโ€ โ†’ s0 โ†’ s1 โ†’ s2 โ†’ s3 โ†’ s4 (accept)
  • ์˜ˆ์‹œ 2 (์‹คํŒจ): s0 โ†’ s1 โ†’ s1 โ†’ s1 โ†’ s1 (fail)
  • NFA๋Š” โ€œ์šด๋นจโ€ โ†’ ์ž˜๋ชป ๊ณ ๋ฅด๋ฉด ํ‹€๋ฆผ
  • ํ•ด๊ฒฐ: ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๋™์‹œ์— ์ถ”์  โ†’ DFA

๐Ÿ“‹ 4ํŽ˜์ด์ง€ โ€” DFA ๊ตฌ์„ฑ ๊ฒฐ๊ณผ

A โ€œvirtual stateโ€ is a subset

๊ฐ€์ƒ ์ƒํƒœ๋Š” ์ƒํƒœ ์ง‘ํ•ฉ์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์ด๋‹ค

S = {S0, S1, S2, S3, S4}
DFA ์ƒํƒœ ์˜ˆ: {S0, S1}, {S1, S2}, โ€ฆ

ํ‘œ: Table encoding DFA (ํ•ต์‹ฌ)

์ƒํƒœ a ์ž…๋ ฅ b ์ž…๋ ฅ
{s0,s1} {s1,s2} {s1}
โ€ฆ โ€ฆ โ€ฆ

โ†’ DFA transition table

์˜ค๋ฅธ์ชฝ ๊ทธ๋ฆผ (DFA ๊ทธ๋ž˜ํ”„)

  • ์ƒํƒœ: {s0,s1}, {s1,s2}, {s1,s3}, โ€ฆ
  • NFA โ†’ DFA ๋ณ€ํ™˜ ์™„๋ฃŒ ์ƒํƒœ

๐Ÿ“‹ 5ํŽ˜์ด์ง€ โ€” ์•Œ๊ณ ๋ฆฌ์ฆ˜: NFAโ†’DFA

Algorithm: NFAโ†’DFA

NFA๋ฅผ DFA๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

โ€œWe need to build a simulation of the NFAโ€
NFA๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•ด์•ผ ํ•œ๋‹ค

DFA = NFA๋ฅผ ๋™์‹œ์— ์ถ”์ ํ•˜๋Š” ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ

ํ•ต์‹ฌ ํ•จ์ˆ˜ ๋‘ ๊ฐ€์ง€

ํ•จ์ˆ˜ ์˜๋ฏธ
Move(si, a) ์ƒํƒœ ์ง‘ํ•ฉ si์—์„œ a๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ ์ง‘ํ•ฉ
ฮต-closure(si) ฮต ์ „์ด๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์ƒํƒœ (๊ณต์งœ ์ด๋™)

์‹œ์ž‘ ์ƒํƒœ

  • S0 = ฮต-closure({s0})
  • ์‹œ์ž‘๋ถ€ํ„ฐ ฮต๋กœ ํ™•์žฅ

๋ฐ˜๋ณต ๊ณผ์ •

๊ฐ ์ž…๋ ฅ ฮฑ์— ๋Œ€ํ•ด:
  Move โ†’ ฮต-closure โ†’ ๋ฐ˜๋ณต
์ƒˆ ์ƒํƒœ ์ƒ์„ฑ โ†’ ๊ณ„์† ์ถ”๊ฐ€ โ†’ ๋” ์ด์ƒ ์—†์œผ๋ฉด ๋

โ€œIterate until no more states are addedโ€
๋” ์ด์ƒ ์ƒํƒœ๊ฐ€ ์ถ”๊ฐ€๋˜์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต โ†’ fixed-point

โ€œSounds more complex than it isโ€ฆโ€
๋ณด๊ธฐ๋ณด๋‹ค ๊ทธ๋ ‡๊ฒŒ ๋ณต์žกํ•˜์ง€ ์•Š๋‹ค โ€” ์‹ค์ œ๋กœ๋Š” ์ง‘ํ•ฉ ๊ณ„์‚ฐ ๋ฐ˜๋ณต์ผ ๋ฟ


๐Ÿ“‹ 6ํŽ˜์ด์ง€ โ€” Subset Construction ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ƒ์„ธ

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ „์ฒด ์ฝ”๋“œ

Dstates โ† { }
add ฮต-closure(s0) as an unmarked state to Dstates

while ( there is an unmarked state T in Dstates )
    mark T
    for each ฮฑ โˆˆ โˆ‘
        U โ† ฮต-closure(Move(T, ฮฑ))
        if ( U โˆ‰ Dstates ) then add U
        ฮด[T, ฮฑ] โ† U

๊ฐ ์ค„ ํ•ด์„

์ฝ”๋“œ ํ•ด์„
Dstates โ† { } DFA ์ƒํƒœ ์ง‘ํ•ฉ์„ ๋นˆ ์ง‘ํ•ฉ์œผ๋กœ ์ดˆ๊ธฐํ™”
ฮต-closure(s0) ์ถ”๊ฐ€ ์‹œ์ž‘ ์ƒํƒœ ์ƒ์„ฑ, ์•„์ง ์ฒ˜๋ฆฌ ์•ˆ ํ–ˆ์œผ๋‹ˆ โ€œunmarkedโ€
while (unmarked T) ์•„์ง ์ฒ˜๋ฆฌ ์•ˆ ๋œ ์ƒํƒœ T๊ฐ€ ์žˆ์œผ๋ฉด ๋ฐ˜๋ณต
mark T T๋ฅผ ์ฒ˜๋ฆฌ ์™„๋ฃŒ๋กœ ํ‘œ์‹œ
for each ฮฑ โˆˆ โˆ‘ ๋ชจ๋“  ์ž…๋ ฅ ๋ฌธ์ž์— ๋Œ€ํ•ด ๋ฐ˜๋ณต
U โ† ฮต-closure(Move(T,ฮฑ)) ํ•ต์‹ฌ ๊ณ„์‚ฐ: Move โ†’ ฮต-closure
if U โˆ‰ Dstates ์ƒˆ ์ƒํƒœ๋ฉด ์ถ”๊ฐ€
ฮด[T, ฮฑ] โ† U DFA ์ „์ด ํ…Œ์ด๋ธ” ์ž‘์„ฑ

์ข…๋ฃŒ ์ด์œ 

  1. Dstates contains no duplicates โ€” ์ค‘๋ณต ์ƒํƒœ ์—†์Œ
  2. **2^ S is finite** โ€” NFA ์ƒํƒœ n๊ฐœ๋ฉด DFA ์ตœ๋Œ€ 2โฟ๊ฐœ (์œ ํ•œ)
  3. monotone โ€” ์ƒํƒœ๋Š” ์ถ”๊ฐ€๋งŒ ๋˜๊ณ  ์‚ญ์ œ ์•ˆ ๋จ

๊ฒฐ๋ก : ๋ฃจํ”„๋Š” ๋ฐ˜๋“œ์‹œ ์ข…๋ฃŒ๋จ

์ค‘์š” ๊ทœ์น™

โ€œAny DFA state containing a final state becomes finalโ€
NFA์˜ final state๋ฅผ ํฌํ•จํ•˜๋Š” DFA ์ƒํƒœ๋Š” final์ด๋‹ค
์˜ˆ: {s1, s4} โ†’ s4๊ฐ€ final์ด๋ฉด โ†’ ์ด ์ƒํƒœ๋„ final


๐Ÿ“‹ 7ํŽ˜์ด์ง€ โ€” Fixed-point ๊ฐœ๋…

Example of a fixed-point computation

๊ณ ์ •์  ๊ณ„์‚ฐ์˜ ์˜ˆ

๊ฐœ๋… ์„ค๋ช…
Monotone construction ์ƒํƒœ๊ฐ€ ๊ณ„์† ์ถ”๊ฐ€๋จ (์ ˆ๋Œ€ ์ค„์ง€ ์•Š์Œ)
Halts when it stops adding ๋” ์ด์ƒ ์ถ”๊ฐ€ ์—†์œผ๋ฉด ์ข…๋ฃŒ
Proofs of halting & correctness are similar ์ข…๋ฃŒ์„ฑ๊ณผ ์ •๋‹น์„ฑ ์ฆ๋ช…์ด ๋น„์Šทํ•˜๋‹ค
These computations arise in many contexts ์ปดํŒŒ์ผ๋Ÿฌ ์ „๋ฐ˜์—์„œ ์ด๋Ÿฐ ๊ณ„์‚ฐ์ด ๋“ฑ์žฅํ•œ๋‹ค

์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜ = fixed-point algorithm
๊ณ„์† ๋ฐ˜๋ณต โ†’ ๋” ์ด์ƒ ๋ณ€ํ™” ์—†์Œ โ†’ ์ข…๋ฃŒ


๐Ÿ“‹ 8ํŽ˜์ด์ง€ โ€” ์˜ˆ์ œ: NFAโ†’DFA (a(b|c)*)

์ •๊ทœ์‹: a(b|c)*

a ๋‹ค์Œ์— b ๋˜๋Š” c๊ฐ€ 0๋ฒˆ ์ด์ƒ ๋ฐ˜๋ณต

Transition Table

์ƒํƒœ a b c
s0 {q1,q2,q3,q4,q6,q9} none none
s1 - {q5,q8,q9,q3,q4,q6} {q7,q8,q9,q3,q4,q6}

โ†’ DFA transition ๊ณ„์‚ฐ ๊ณผ์ • (subset construction ์‹ค์ œ ์ ์šฉ)

๊ทธ๋ฆผ ์„ค๋ช… (์™ผ์ชฝ NFA)

  • ฮต-transition ๋งŽ์Œ, branching ๊ตฌ์กฐ
  • ๋ณต์žกํ•œ NFA โ†’ DFA๋กœ ๋‹จ์ˆœํ™”ํ•˜๋Š” ๊ณผ์ •

๐Ÿ“‹ 9ํŽ˜์ด์ง€ โ€” ์™„์„ฑ๋œ DFA: a(b|c)*

The DFA for a(b|c)*

โ€œEnds up smaller than the NFAโ€
์ด ๊ฒฝ์šฐ DFA๊ฐ€ NFA๋ณด๋‹ค ๋” ์ž‘๋‹ค
(์ผ๋ฐ˜์ ์œผ๋กœ๋Š” DFA๊ฐ€ ๋” ์ปค์ง€๋Š”๋ฐ, ์ด ์˜ˆ์‹œ๋Š” ํŠน์ดํ•˜๊ฒŒ ๋” ์ž‘์•„์ง)

โ€œAll transitions are deterministicโ€
๋ชจ๋“  ์ „์ด๋Š” ๊ฒฐ์ •์ ์ด๋‹ค โ€” ํ•ญ์ƒ ํ•˜๋‚˜์˜ ๊ฒฝ๋กœ, ์„ ํƒ ์—†์Œ

โ€œUse the same code skeleton as beforeโ€
์ด์ „ ์ฝ”๋“œ ๊ตฌ์กฐ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ

Transition Table

์ƒํƒœ a b c
S0 S1 - -
S1 - S2 S3

๊ทธ๋ฆผ ์„ค๋ช…

  • S0 โ†’ a โ†’ S1
  • S1 โ†’ b/c ๋ฐ˜๋ณต (๋ฃจํ”„)

โ€œBut remember our goalโ€
ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ๋ฅผ ๊ธฐ์–ตํ•˜๋ผ
DFA ๋งŒ๋“œ๋Š” ๊ฒŒ ๋์ด ์•„๋‹˜ โ†’ ์ตœ์†Œํ™”๊ฐ€ ์ตœ์ข… ๋ชฉํ‘œ


๐Ÿ“‹ 10ํŽ˜์ด์ง€ โ€” ์ •๋ฆฌ (Outline ์—…๋ฐ์ดํŠธ)

์ „์ฒด ํ๋ฆ„ ์ •๋ฆฌ

๋‹จ๊ณ„ ์ƒํƒœ
RE โ†’ NFA โœ” ์™„๋ฃŒ
NFA โ†’ DFA โœ” ๋ฐฉ๊ธˆ ๋ฐฐ์šด ๋‚ด์šฉ
DFA โ†’ minimal-state DFA โ† ๋‹ค์Œ ํ•ต์‹ฌ ์ฃผ์ œ
Scanner generators ์ดํ›„
์ •๊ทœํ‘œํ˜„์‹ โ†’ NFA โ†’ DFA โ†’ ์ตœ์†Œ DFA

๐Ÿ“‹ 11ํŽ˜์ด์ง€ โ€” DFA Minimization ๊ฐœ๋… ํ•ต์‹ฌ

DFA Minimization Overview

DFA ์ตœ์†Œํ™” ๊ฐœ์š”

The Big Picture

โ€œDiscover distinguishable statesโ€
๊ตฌ๋ณ„ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋“ค์„ ์ฐพ์•„๋ผ

distinguishable ์ •์˜

โ€œTwo states p and q are distinguishable by input string w iffโ€ฆโ€
๋‘ ์ƒํƒœ p, q๋Š” ๋ฌธ์ž์—ด w์— ์˜ํ•ด ๊ตฌ๋ณ„๋œ๋‹ค
โ†” p์—์„œ ์‹œ์ž‘ํ•˜๋ฉด w๋ฅผ acceptํ•˜์ง€๋งŒ q์—์„œ๋Š” reject์ธ ๊ฒฝ์šฐ

โˆƒ w : p โ†’ accept, q โ†’ reject โ†’ ๊ตฌ๋ณ„ ๊ฐ€๋Šฅ

โ€œTwo states p and q are distinguishable ifโ€ฆโ€
์–ด๋–ค ๋ฌธ์ž์—ด ํ•˜๋‚˜๋ผ๋„ ์กด์žฌํ•˜๋ฉด ๊ตฌ๋ณ„ ๊ฐ€๋Šฅ

indistinguishable ์ •์˜

๋ชจ๋“  ๋ฌธ์ž์—ด์— ๋Œ€ํ•ด ๊ฐ™์€ ๊ฒฐ๊ณผ โ†’ ์™„์ „ํžˆ ๋™์ผํ•œ behavior

โ€œStates that cannot be distinguished can be represented by a single stateโ€
๊ตฌ๋ณ„ํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ๋“ค์€ ํ•˜๋‚˜๋กœ ํ•ฉ์น  ์ˆ˜ ์žˆ๋‹ค โ†’ minimization ํ•ต์‹ฌ

๊ทธ๋ฆผ ์„ค๋ช… (์˜ค๋ฅธ์ชฝ)

  • s2, s3 ๋น„๊ต โ†’ s2 โ‰ก s3 (๊ตฌ๋ณ„ ๋ถˆ๊ฐ€๋Šฅ) โ†’ ํ•˜๋‚˜๋กœ ํ•ฉ์นจ: s2s3

๐Ÿ“‹ 12ํŽ˜์ด์ง€ โ€” Partition ๊ฐœ๋…

์ƒํƒœ ์ง‘ํ•ฉ ๋ถ„ํ• 

โ€œThe set of states is divided into subsetsโ€
์ƒํƒœ ์ง‘ํ•ฉ์„ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์ง‘ํ•ฉ์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค

โ€œS is partitioned into Pโ€
S๋ฅผ P๋ผ๋Š” ๋ถ„ํ• ๋กœ ๋‚˜๋ˆˆ๋‹ค

โ€œEach state s โˆˆ S is in exactly one setโ€
๊ฐ ์ƒํƒœ๋Š” ์ •ํ™•ํžˆ ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์—๋งŒ ์†ํ•œ๋‹ค โ€” ์ค‘๋ณต ์—†์Œ

โ€œStates in the same set have not been distinguished yetโ€
๊ฐ™์€ ๊ทธ๋ฃน์— ์žˆ๋Š” ์ƒํƒœ๋Š” ์•„์ง ๊ตฌ๋ณ„๋˜์ง€ ์•Š์€ ์ƒํƒœ

โ€œStates from different sets are distinguishableโ€
๋‹ค๋ฅธ ๊ทธ๋ฃน์ด๋ฉด ์ด๋ฏธ ๊ตฌ๋ณ„๋จ

์ดˆ๊ธฐ ๋ถ„ํ• 

โ€œInitially the partition P consists of 2 setsโ€
์ฒ˜์Œ์—๋Š” 2๊ฐœ ๊ทธ๋ฃน์œผ๋กœ ์‹œ์ž‘

โ€œaccepting states F / non-accepting states S-Fโ€
accept ์ƒํƒœ / non-accept ์ƒํƒœ

P0 = { F , S-F }

โ€œdistinguishable by ฮตโ€
ฮต(๋นˆ ๋ฌธ์ž์—ด)๋กœ๋„ ๊ตฌ๋ณ„๋จ โ€” accept vs non-accept๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฆ„

๋ฐ˜๋ณต ๊ณผ์ •

โ€œalgorithm repeatedly picks a setโ€
์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ณ„์† ๊ทธ๋ฃน์„ ์„ ํƒํ•ด์„œ

โ€œtries to distinguishโ€
๊ตฌ๋ณ„์„ ์‹œ๋„ํ•œ๋‹ค

โ€œsplit pi along ฮฑโ€
์ž…๋ ฅ ฮฑ์— ๋”ฐ๋ผ ๊ทธ๋ฃน์„ ์ชผ๊ฐ ๋‹ค


๐Ÿ“‹ 13ํŽ˜์ด์ง€ โ€” Split ๊ฐœ๋…

Splitting of a State Set along Symbol ฮฑ

์ž…๋ ฅ ฮฑ์— ๋”ฐ๋ฅธ ์ƒํƒœ ์ง‘ํ•ฉ ๋ถ„ํ• 

โ€œrepeatedly picks a setโ€
๊ณ„์† ์ง‘ํ•ฉ์„ ์„ ํƒํ•˜๊ณ 

โ€œtries to distinguish between statesโ€
๊ทธ ์•ˆ์˜ ์ƒํƒœ๋“ค์„ ๊ตฌ๋ณ„ํ•˜๋ ค๊ณ  ํ•œ๋‹ค

โ€œEventually no more set can be splitโ€
๋” ์ด์ƒ ์ชผ๊ฐค ์ˆ˜ ์—†์œผ๋ฉด ์ข…๋ฃŒ

๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ (๊ทธ๋ฆผ ์„ค๋ช…)

๊ฒฝ์šฐ ์„ค๋ช…
ฮฑ does not split pi ฮฑ๋กœ ๊ตฌ๋ณ„ ์•ˆ ๋จ โ†’ ์ƒํƒœ๋“ค์ด ๋™์ผํ•˜๊ฒŒ ํ–‰๋™ โ†’ ๊ทธ๋Œ€๋กœ ์œ ์ง€
ฮฑ splits pi into {sa} and {sb, sc} ฮฑ๋กœ ์ธํ•ด ์ง‘ํ•ฉ์ด ๋‘˜๋กœ ๋‚˜๋‰จ โ†’ ์ผ๋ถ€๊ฐ€ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ๊ฐ โ†’ ๊ตฌ๋ณ„๋จ

ํ•ต์‹ฌ: ๊ฐ™์€ ๊ทธ๋ฃน โ†’ ์ž…๋ ฅ ๋„ฃ์–ด์„œ ๋‹ค๋ฅด๋ฉด ์ชผ๊ฐ ๋‹ค


๐Ÿ“‹ 14ํŽ˜์ด์ง€ โ€” Minimization ์•Œ๊ณ ๋ฆฌ์ฆ˜

DFA ์ตœ์†Œํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜

P โ† { F, S-F }

while ( P is still changing )
    T โ† { }
    for each set p โˆˆ P
        T โ† T โˆช Split(p)
    P โ† T

Split(p):
    if ฮฑ splits p into p1 and p2
        return {p1, p2}
    return p

๊ฐ ์ค„ ํ•ด์„

์ฝ”๋“œ ํ•ด์„
P โ† { F, S-F } ์ดˆ๊ธฐ partition ์„ค์ •
while (P is still changing) partition์ด ๋ณ€ํ•˜๋Š” ๋™์•ˆ ๋ฐ˜๋ณต (ํ•ต์‹ฌ ๋ฃจํ”„)
T โ† { } ์ƒˆ partition ์ €์žฅ์šฉ ์ดˆ๊ธฐํ™”
T โ† T โˆช Split(p) p๋ฅผ ์ชผ๊ฐœ์„œ T์— ๋„ฃ์Œ
P โ† T ์ƒˆ partition์œผ๋กœ ๊ฐฑ์‹ 
if ฮฑ splits p into p1, p2 ฮฑ๋กœ ์ชผ๊ฐœ์ง€๋ฉด ๋‘ ์ง‘ํ•ฉ ๋ฐ˜ํ™˜
return p ์•ˆ ์ชผ๊ฐœ์ง€๋ฉด ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜

๊ทธ๋ฆผ: ์˜ˆ์ œ DFA โ†’ (a|b)*abb

์ดˆ๊ธฐ partition:

P0 = { {s4}, {s0,s1,s2,s3} }
- accept:     {s4}
- non-accept: {s0,s1,s2,s3}

๐Ÿ“‹ 15ํŽ˜์ด์ง€ โ€” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹œ์ž‘ ์ƒํƒœ

ํ˜„์žฌ ์ƒํƒœ

P0 = { {s4}, {s0,s1,s2,s3} }
T = {}

๊ทธ๋ฆผ ์„ค๋ช…

  • ์•„์ง ์•„๋ฌด๊ฒƒ๋„ ๋ถ„ํ•  ์•ˆ ํ•œ ์ดˆ๊ธฐ ์ƒํƒœ
  • ์ฒ˜๋ฆฌ ์ˆœ์„œ:
    1. p = {s4}
    2. p = {s0,s1,s2,s3}

๐Ÿ“‹ 16ํŽ˜์ด์ง€ โ€” ์ฒซ ๋ฒˆ์งธ ์ง‘ํ•ฉ ์ฒ˜๋ฆฌ ์‹œ์ž‘

ํ˜„์žฌ ์ƒํƒœ

P0 = { {s4}, {s0,s1,s2,s3} }
T = { }
p = {s4}
โˆ‘ = {a, b}

์ง€๊ธˆ ํ•˜๋Š” ๊ฒƒ: p = {s4}๋ฅผ ์ชผ๊ฐค ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธ

๊ทธ๋ฆผ ์„ค๋ช…

  • DFA ๊ตฌ์กฐ ๊ทธ๋Œ€๋กœ ์œ ์ง€
  • s4๋Š” accept ์ƒํƒœ
  • ๋‹จ์ผ ์ƒํƒœ ์ง‘ํ•ฉ

๐Ÿ“‹ 17ํŽ˜์ด์ง€ โ€” Split ํ•จ์ˆ˜ ์„ค๋ช…

Invoke Split(p) function

Split(p) ํ•จ์ˆ˜ ์‹คํ–‰

โ€œDetermines whether p can be splitโ€
p๋ฅผ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š”์ง€ ํŒ๋‹จ

โ€œIf states can be distinguishable by ฮฑโ€
์ž…๋ ฅ ฮฑ๋กœ ๊ตฌ๋ณ„ ๊ฐ€๋Šฅํ•˜๋ฉด ๋ถ„ํ• 

ํ•ต์‹ฌ ํŒ๋‹จ ๊ธฐ์ค€:

  • ๊ฐ™์€ ์ง‘ํ•ฉ ์•ˆ์—์„œ
  • ์–ด๋–ค ์ž…๋ ฅ ๋„ฃ์—ˆ์„ ๋•Œ
  • ๋‹ค๋ฅธ ์ง‘ํ•ฉ์œผ๋กœ ๊ฐ€๋ฉด โ†’ ์ชผ๊ฐ ๋‹ค

โ€œIf X and Y are two states in a DFA, we can combine them when they are not distinguishableโ€
๋‘ ์ƒํƒœ๊ฐ€ ๊ตฌ๋ณ„๋˜์ง€ ์•Š์œผ๋ฉด ํ•˜๋‚˜๋กœ ํ•ฉ์น  ์ˆ˜ ์žˆ๋‹ค โ†’ minimization์˜ ๋ชฉ์ 


๐Ÿ“‹ 18ํŽ˜์ด์ง€ โ€” ฮฑ = a ๊ฒ€์‚ฌ

ฮฑ = a

์ž…๋ ฅ a๋กœ ๊ฒ€์‚ฌ

โ€œDoes a split p = {s4}?โ€
a๋กœ {s4}๋ฅผ ์ชผ๊ฐค ์ˆ˜ ์žˆ๋Š”๊ฐ€?

ํ˜„์žฌ p = {s4} โ†’ ์ƒํƒœ๊ฐ€ ํ•˜๋‚˜๋ฟ์ž„

๊ฒฐ๋ก : ์ ˆ๋Œ€ ๋ชป ์ชผ๊ฐฌ

์ชผ๊ฐœ๋ ค๋ฉด ์ตœ์†Œ 2๊ฐœ ์ƒํƒœ ํ•„์š”


๐Ÿ“‹ 19ํŽ˜์ด์ง€ โ€” ฮฑ = a ๊ฒฐ๊ณผ

๊ฒฐ๋ก 

โ€œAre there any two subsets distinguishable?โ€
๊ตฌ๋ณ„ ๊ฐ€๋Šฅํ•œ ๋‘ ์ƒํƒœ๊ฐ€ ์žˆ๋Š”๊ฐ€?

โ€œNopeโ€
์—†๋‹ค

โ€œ(we cannot split a set which has a single elementโ€ฆ)โ€
์›์†Œ ํ•˜๋‚˜์งœ๋ฆฌ ์ง‘ํ•ฉ์€ ์ชผ๊ฐค ์ˆ˜ ์—†๋‹ค

โญ **์‹œํ—˜ ํฌ์ธํŠธ: p = 1 โ†’ split ๋ถˆ๊ฐ€๋Šฅ**

๐Ÿ“‹ 20ํŽ˜์ด์ง€ โ€” ฮฑ = b ๊ฒ€์‚ฌ

ฮฑ = b

์ž…๋ ฅ b๋กœ ๊ฒ€์‚ฌ

โ€œDoes b split p = {s4}?โ€
b๋กœ ์ชผ๊ฐค ์ˆ˜ ์žˆ๋Š”๊ฐ€?

โ€œNopeโ€
๋ถˆ๊ฐ€๋Šฅ

์ด์œ  ๋™์ผ:

  • p = {s4}
  • ์›์†Œ 1๊ฐœ
  • ๋ฌด์กฐ๊ฑด ์œ ์ง€

๊ฒฐ๊ณผ

Split({s4}) = {s4}
T = { {s4} }

๐Ÿ“‹ 21ํŽ˜์ด์ง€ โ€” ๋‹ค์Œ ์ง‘ํ•ฉ ์ฒ˜๋ฆฌ ์ค€๋น„

ํ˜„์žฌ ์ƒํƒœ

P0 = { {s4}, {s0,s1,s2,s3} }
T = { {s4} }
p = {s0,s1,s2,s3}

s4๋Š” ์ด๋ฏธ ์ฒ˜๋ฆฌ ์™„๋ฃŒ, ์ด์ œ ํฐ ์ง‘ํ•ฉ ์ฒ˜๋ฆฌ ์‹œ์ž‘

โˆ‘ = {a, b}

์ด ์ง‘ํ•ฉ์—์„œ split์ด ์‹ค์ œ๋กœ ๋ฐœ์ƒํ•œ๋‹ค


๐Ÿ“‹ 22ํŽ˜์ด์ง€ โ€” Split ์ค€๋น„ ์ƒํƒœ

ํ˜„์žฌ T

T = { } โˆช Split({s4}) = { {s4} }

T์— {s4} ์ถ”๊ฐ€ ์™„๋ฃŒ

์ด์ œ ํ•ด์•ผ ํ•  ๊ฒƒ

Split({s0,s1,s2,s3})

์ง€๊ธˆ๋ถ€ํ„ฐ๊ฐ€ ์ง„์งœ minimization ํ•ต์‹ฌ


๐Ÿ“‹ 23ํŽ˜์ด์ง€ โ€” ์ง‘ํ•ฉ ์ฒ˜๋ฆฌ ์‹œ์ž‘

ํ˜„์žฌ ์ƒํƒœ

T = { {s4} }
p = {s0,s1,s2,s3}
โˆ‘ = {a, b}

์ž…๋ ฅ a, b๋กœ ๊ฐ๊ฐ ๊ฒ€์‚ฌ ์‹œ์ž‘


๐Ÿ“‹ 24ํŽ˜์ด์ง€ โ€” ฮฑ ์„ ํƒ ์ค€๋น„

ฮฑ = ?

์–ด๋–ค ์ž…๋ ฅ์œผ๋กœ ๊ฒ€์‚ฌํ• ์ง€ ์„ ํƒ

์ˆœ์„œ๋Œ€๋กœ ์ง„ํ–‰:

  1. ฮฑ = a ๊ฒ€์‚ฌ
  2. ฮฑ = b ๊ฒ€์‚ฌ

๐Ÿ“‹ 25ํŽ˜์ด์ง€ โ€” ฮฑ = a ๊ฒ€์‚ฌ ์‹œ์ž‘

ฮฑ = a

์ž…๋ ฅ a๋กœ ๊ฒ€์‚ฌ

๊ฐ ์ƒํƒœ์˜ a ์ด๋™

์ƒํƒœ a ์ด๋™
s0 s1
s1 s1
s2 s1
s3 s1

๊ฒฐ๊ณผ ๋ถ„์„

๋ชจ๋“  ์ƒํƒœ โ†’ s1 โ†’ ๋™์ผ behavior

๊ฒฐ๋ก : ฮฑ = a๋กœ๋Š” split ๋ถˆ๊ฐ€๋Šฅ

์ด์œ :

  • ๊ฐ™์€ partition ๋‚ด๋ถ€๋กœ๋งŒ ์ด๋™
  • ๊ตฌ๋ณ„ ์•ˆ ๋จ

๐Ÿ“‹ 26ํŽ˜์ด์ง€ โ€” ฮฑ = a ์ตœ์ข… ํ™•์ธ

ฮฑ = a

๊ฐ ์ƒํƒœ์˜ a ์ด๋™ (์žฌํ™•์ธ)

์ƒํƒœ a ์ด๋™
s0 s1
s1 s1
s2 s1
s3 s1

โ€œSplit on a: Noneโ€
a๋กœ๋Š” ๋ถ„ํ•  ์—†์Œ

์ด์œ :

  • ๊ฐ™์€ partition ๋‚ด๋ถ€๋กœ๋งŒ ์ด๋™
  • ๊ตฌ๋ณ„ ๋ถˆ๊ฐ€
  • split ์—†์Œ

๐Ÿ“‹ 27ํŽ˜์ด์ง€ โ€” ฮฑ = a ๊ฒฐ๋ก  ํ™•์ •

Noneโ€ฆ

๋ถ„ํ•  ์—†์Œ

๊ฐ™์€ ์ง‘ํ•ฉ ์•ˆ์—์„œ ๊ฐ™์€ ํ–‰๋™ โ†’ ์œ ์ง€

๋‹ค์Œ ๋‹จ๊ณ„: ฮฑ = b ๊ฒ€์‚ฌ๋กœ ์ด๋™


๐Ÿ“‹ 28ํŽ˜์ด์ง€ โ€” ๐Ÿ”ฅ ฮฑ = b์—์„œ split ๋ฐœ์ƒ (์‹œํ—˜ ํ•ต์‹ฌ)

ฮฑ = b

์ž…๋ ฅ b๋กœ ๊ฒ€์‚ฌ

๊ฐ ์ƒํƒœ์˜ b ์ด๋™

์ƒํƒœ b ์ด๋™ ์†ํ•˜๋Š” partition
s0 s2 {s0,s1,s2,s3}
s1 s3 {s0,s1,s2,s3}
s2 s2 {s0,s1,s2,s3}
s3 s4 {s4} โ† ๋‹ค๋ฅธ ๊ทธ๋ฃน!

๊ฒฐ์ •์  ์ฐจ์ด

  • s3 โ†’ {s4} (accept group)
  • ๋‚˜๋จธ์ง€ โ†’ non-accept group

โ†’ split ๋ฐœ์ƒ!


๐Ÿ“‹ 29ํŽ˜์ด์ง€ โ€” Split ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜

Return s0,s1,s2 , s3

์ง‘ํ•ฉ์„ ๋‘ ๊ฐœ๋กœ ๋‚˜๋ˆ ์„œ ๋ฐ˜ํ™˜

๊ทธ๋ฆผ ์˜๋ฏธ

๊ธฐ์กด: {s0,s1,s2,s3}
โ†’ ์ด์ œ: {s0,s1,s2} / {s3}

์ด๊ฒŒ minimization์˜ ํ•ต์‹ฌ ๊ฒฐ๊ณผ


๐Ÿ“‹ 30ํŽ˜์ด์ง€ โ€” Partition ์—…๋ฐ์ดํŠธ

Split ๊ฒฐ๊ณผ

Split(p) = s0,s1,s},       s3 

T ์—…๋ฐ์ดํŠธ

๊ธฐ์กด: T = { {s4} }
์—…๋ฐ์ดํŠธ ํ›„: T = { {s4}, {s0,s1,s2}, {s3} }

Partition ๋ณ€ํ™”

P0 = { {s4}, {s0,s1,s2,s3} }
       โ†“ (split ๋ฐœ์ƒ ํ›„)
P1 = { {s4}, {s0,s1,s2}, {s3} }

๐Ÿ“‹ 31ํŽ˜์ด์ง€ โ€” Partition ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ ์ƒํƒœ

ํ˜„์žฌ ์ƒํƒœ

P = { {s4}, {s0,s1,s2}, {s3} }
T = { {s4}, {s0,s1,s2}, {s3} }

1์ฐจ split ์™„๋ฃŒ โ†’ partition 3๊ฐœ๋กœ ์ฆ๊ฐ€

์ด์ œ๋ถ€ํ„ฐ: ๊ฐ ์ง‘ํ•ฉ์„ ๋‹ค์‹œ ๊ฒ€์‚ฌ ์‹œ์ž‘


๐Ÿ“‹ 32ํŽ˜์ด์ง€ โ€” ๋‹ค์Œ iteration ์‹œ์ž‘

P1

P1 = { {s4}, {s0,s1,s2}, {s3} }

while loop ๊ณ„์†
partition์ด ๋ณ€ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋ณต ์กฐ๊ฑด ๋งŒ์กฑ โ†’ ๊ณ„์†

โ†’ fixed-point ์•„์ง ์•„๋‹˜


๐Ÿ“‹ 33ํŽ˜์ด์ง€ โ€” ๋‹ค์Œ ์ฒ˜๋ฆฌ ์ค€๋น„

๋‹ค์Œ ์ง‘ํ•ฉ ์ˆœํšŒ ์ค€๋น„

์ˆœ์„œ:

  1. {s4}
  2. {s0,s1,s2}
  3. {s3}

๐Ÿ“‹ 34ํŽ˜์ด์ง€ โ€” ์ƒˆ iteration ์ดˆ๊ธฐํ™”

T = { }

์ƒˆ partition ์ดˆ๊ธฐํ™”

์ด์ „ P๋ฅผ ๋‹ค์‹œ ์ชผ๊ฐœ๊ธฐ ์‹œ์ž‘


๐Ÿ“‹ 35ํŽ˜์ด์ง€ โ€” ๐Ÿ”ฅ 2์ฐจ split ๋ฐœ์ƒ

ํ˜„์žฌ ์ƒํƒœ

P1 = { {s0,s1,s2}, {s3}, {s4} }
p = {s0,s1,s2}

ฮฑ = b ๊ฒ€์‚ฌ

๊ฐ ์ƒํƒœ์˜ b ์ด๋™:

์ƒํƒœ b ์ด๋™ ์†ํ•˜๋Š” partition
s0 s2 {s0,s1,s2}
s1 s3 {s3} โ† ๋‹ค๋ฅธ ๊ทธ๋ฃน!
s2 s2 {s0,s1,s2}

๊ฒฐ์ •์  ์ฐจ์ด

  • s1 โ†’ {s3}
  • s0, s2 โ†’ {s0,s1,s2}

โ†’ split ๋ฐœ์ƒ!

๊ฒฐ๊ณผ

{s0,s2} / {s1}

Partition ์—…๋ฐ์ดํŠธ

P1 = { {s4}, {s0,s1,s2}, {s3} }
       โ†“ (2์ฐจ split ๋ฐœ์ƒ)
P2 = { {s4}, {s0,s2}, {s1}, {s3} }

๐Ÿ“‹ 36ํŽ˜์ด์ง€ โ€” Partition ํ™•์ • ์ƒํƒœ

ํ˜„์žฌ ์ƒํƒœ

์ด์ „: T = { {s4} }
2์ฐจ split ํ›„: T = { {s4}, {s0,s2}, {s1}, {s3} }

์ด์ œ partition 4๊ฐœ:

  • ๊ฐ ์ƒํƒœ ๊ฑฐ์˜ ๋‹ค ๋ถ„๋ฆฌ๋จ

๐Ÿ“‹ 37ํŽ˜์ด์ง€ โ€” P2 ์ƒํƒœ ์œ ์ง€

P2

P2 = { {s0,s2}, {s1}, {s3}, {s4} }

T = ๋™์ผ

๋” ์ด์ƒ ๋ณ€ํ™” ์—†์Œ

์ค‘์š”ํ•œ ์‹ ํ˜ธ: split ๋” ์ด์ƒ ์—†์Œ


๐Ÿ“‹ 38ํŽ˜์ด์ง€ โ€” iteration ํ™•์ธ

1st iter / 2nd / 3rd / 4thโ€ฆ

์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณตํ•ด์„œ ํ™•์ธํ–ˆ์ง€๋งŒ:

  • partition ๋ณ€ํ™” ์—†์Œ

fixed-point ๋„๋‹ฌ


๐Ÿ“‹ 39ํŽ˜์ด์ง€ โ€” ์ตœ์ข… ํ™•์ธ

P2 ์œ ์ง€

P2 = { {s0,s2}, {s1}, {s3}, {s4} }

๋” ์ด์ƒ split ๋ถˆ๊ฐ€๋Šฅ

๋ชจ๋“  ์ƒํƒœ๊ฐ€ distinguishable ์ƒํƒœ๋กœ ๋ถ„๋ฆฌ ์™„๋ฃŒ


๐Ÿ“‹ 40ํŽ˜์ด์ง€ โ€” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ข…๋ฃŒ

While loop comes to a halt

while ๋ฃจํ”„ ์ข…๋ฃŒ

โ€œP does not be changedโ€
partition์ด ๋” ์ด์ƒ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค โ†’ ์ข…๋ฃŒ ์กฐ๊ฑด ๋งŒ์กฑ

์ตœ์ข… ์ƒํƒœ

P2 = { {s0,s2}, {s1}, {s3}, {s4} }

s0์™€ s2๋Š” ์™„์ „ํžˆ ๋™์ผํ•œ behavior:

  • ์–ด๋–ค ์ž…๋ ฅ ๋„ฃ์–ด๋„ ๋™์ผํ•˜๊ฒŒ ํ–‰๋™
  • โ†’ ํ•ฉ์ณ๋„ ๋ฌธ์ œ ์—†์Œ

๐Ÿ“‹ 41ํŽ˜์ด์ง€ โ€” ์ตœ์†Œ DFA ๊ฒฐ๊ณผ

์ตœ์ข… Partition

P = { {s0,s2}, {s1}, {s3}, {s4} }

๊ฐ partition์ด ํ•˜๋‚˜์˜ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค:

  • {s0,s2} โ†’ ํ•˜๋‚˜์˜ ์ƒํƒœ
  • {s1} โ†’ ํ•˜๋‚˜์˜ ์ƒํƒœ
  • {s3} โ†’ ํ•˜๋‚˜์˜ ์ƒํƒœ
  • {s4} โ†’ ํ•˜๋‚˜์˜ ์ƒํƒœ

๊ทธ๋ฆผ ์„ค๋ช…

  • ๊ธฐ์กด DFA โ†’ ์ตœ์†Œ DFA ๋ณ€ํ™˜
  • s0, s2 โ†’ ํ•ฉ์ณ์ง
  • ๋‚˜๋จธ์ง€๋Š” ๊ทธ๋Œ€๋กœ

๊ฐ™์€ behavior โ†’ ํ•˜๋‚˜๋กœ ํ•ฉ์นจ


๐Ÿ“‹ 42ํŽ˜์ด์ง€ โ€” ์™œ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ข…๋ฃŒ๋˜๋Š”๊ฐ€?

Why does this terminate?

โ€œp โˆˆ 2^Sโ€
partition์€ ์ƒํƒœ ์ง‘ํ•ฉ์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ โ†’ ๊ฐ€๋Šฅํ•œ partition ์ˆ˜๋Š” ์œ ํ•œ

โ€œStart with 2 subsetsโ€
์ฒ˜์Œ์—” F / S-F 2๊ฐœ๋กœ ์‹œ์ž‘

โ€œWhile loop takes Pi โ†’ Pi+1โ€
๋ฐ˜๋ณตํ•˜๋ฉด์„œ partition์ด ์ ์  ์ชผ๊ฐœ์ง

โ€œPi+1 is closer to |S| setsโ€
์ ์  ์ƒํƒœ ๊ฐœ์ˆ˜๋งŒํผ ์ชผ๊ฐœ์ง

โ€œMaximum of S splitsโ€
**์ตœ๋Œ€ S ๋ฒˆ๋งŒ split ๊ฐ€๋Šฅ**

โ€œPartitions are never combinedโ€
ํ•ฉ์ณ์ง€๋Š” ์ผ์€ ์—†์Œ โ€” ์˜ค์ง split๋งŒ ์กด์žฌ

โ€œalgorithm eventually terminatesโ€
๊ฒฐ๊ตญ ์ข…๋ฃŒ๋œ๋‹ค

ํ•ต์‹ฌ: ์œ ํ•œ + split๋งŒ ์žˆ์Œ โ†’ ๋ฐ˜๋“œ์‹œ ์ข…๋ฃŒ


๐Ÿ“‹ 43ํŽ˜์ด์ง€ โ€” ์™œ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์˜ฌ๋ฐ”๋ฅธ๊ฐ€?

Why does this work?

โ€œmaintains 2 invariantsโ€
๋‘ ๊ฐ€์ง€ ๋ถˆ๋ณ€ ์กฐ๊ฑด ์œ ์ง€

๋ถˆ๋ณ€ ์กฐ๊ฑด ์˜๋ฏธ
same set โ†’ not distinguished ๊ฐ™์€ ์ง‘ํ•ฉ์— ์žˆ์œผ๋ฉด ์•„์ง ๊ตฌ๋ณ„ ์•ˆ ๋จ
different sets โ†’ distinguishable ๋‹ค๋ฅธ ์ง‘ํ•ฉ์ด๋ฉด ๊ตฌ๋ณ„ ๊ฐ€๋Šฅ

ํ•ต์‹ฌ ๋ณด์žฅ: ๊ฐ™์€ ์ง‘ํ•ฉ = ๊ฐ™์€ ์ƒํƒœ๋กœ ํ•ฉ์ณ๋„ ์•ˆ์ „

โ€œfinal partitionโ€
์ตœ์ข… partition์€ ๊ตฌ๋ณ„ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ ์ง‘ํ•ฉ

โ€œProof sketchโ€
์ฆ๋ช…์€ ๊ต์žฌ ์ฐธ๊ณ 

partition ๊ตฌ์กฐ ์ž์ฒด๊ฐ€ ์ •๋‹ต์„ ๋ณด์žฅํ•œ๋‹ค.


๐Ÿ“‹ 44ํŽ˜์ด์ง€ โ€” ์ตœ์ข… ๊ฒฐ๊ณผ + ์ง๊ด€

DFA Minimization Example

โ€œApplying the minimization algorithmโ€
์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ ์šฉ ๊ฒฐ๊ณผ

โ€œproduce minimal DFAโ€
์ตœ์†Œ DFA ์ƒ์„ฑ

๊ทธ๋ฆผ ์„ค๋ช… (๋‘ DFA ๋น„๊ต)

  • ์™ผ์ชฝ: ๋ณต์žกํ•œ DFA
  • ์˜ค๋ฅธ์ชฝ: ์ตœ์†Œ DFA

โ€œhuman would design a simpler automatonโ€
์‚ฌ๋žŒ์€ ๋” ๋‹จ์ˆœํ•œ ์˜คํ† ๋งˆํƒ€๋ฅผ ๋งŒ๋“ ๋‹ค
์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๊ฒฐ๊ตญ ์‚ฌ๋žŒ์ด ์ง๊ด€์ ์œผ๋กœ ๋งŒ๋“  ๊ฒƒ๊ณผ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

โ€œevery RE language can be recognized by a minimal DFAโ€
๋ชจ๋“  ์ •๊ทœํ‘œํ˜„์‹์€ ์ตœ์†Œ DFA๋กœ ํ‘œํ˜„ ๊ฐ€๋Šฅ

โ€œunique up to state namesโ€
์ƒํƒœ ์ด๋ฆ„๋งŒ ๋‹ค๋ฅด๊ณ  ๊ตฌ์กฐ๋Š” ์œ ์ผ

โญ ๋งค์šฐ ์ค‘์š”: ์ตœ์†Œ DFA๋Š” โ€œ์œ ์ผํ•˜๋‹คโ€


๐Ÿ“‹ 45ํŽ˜์ด์ง€ โ€” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ˜•ํƒœ ์žฌ์ •๋ฆฌ

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์žฌ์ •๋ฆฌ

P โ† { F, S-F }

while (P is changing)
    Split(p)

โˆ‘ = {a, b, c, ...}

์ „์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌ์กฐ๋ฅผ ๋‹ค์‹œ ํ•œ๋ฒˆ ํ™•์ธํ•˜๋Š” ์Šฌ๋ผ์ด๋“œ.


๐Ÿ“‹ 46ํŽ˜์ด์ง€ โ€” ์ „์ฒด ๊ณผ์ • ์š”์•ฝ ํ‘œ

Partition ๋ณ€ํ™” ๊ณผ์ •

Partition Split on a Split on b ๊ฒฐ๊ณผ
P0: {s0,s1,s2,s3} no split split ๋ฐœ์ƒ โ†’ {s0,s1,s2}, {s3}
P1: {s0,s1,s2} no split split ๋ฐœ์ƒ โ†’ {s0,s2}, {s1}
P2: {s0,s2}, {s1}, {s3}, {s4} no split no split โ†’ ์ข…๋ฃŒ

๊ทธ๋ฆผ ์„ค๋ช…

  • before DFA / after (์ตœ์†Œ) DFA ๋น„๊ต ์‹œ๊ฐํ™”

๐Ÿ“‹ 47ํŽ˜์ด์ง€ โ€” ์ตœ์ข… ์ •๋ฆฌ (Outline ์™„๋ฃŒ)

์ „์ฒด ํ๋ฆ„ ์™„๋ฃŒ

๋‹จ๊ณ„ ์ƒํƒœ
RE โ†’ NFA โœ” ์™„๋ฃŒ
NFA โ†’ DFA โœ” ์™„๋ฃŒ
DFA โ†’ minimal DFA โœ” ์™„๋ฃŒ
Scanner generators โ†’ ๋‹ค์Œ ์ฃผ์ œ๋กœ ๋„˜์–ด๊ฐ

๐Ÿ”ฅ ์ „์ฒด ๊ฐ•์˜ ํ•ต์‹ฌ ์š”์•ฝ (์‹œํ—˜์šฉ)

์ „์ฒด ํ๋ฆ„

์ •๊ทœํ‘œํ˜„์‹ โ†’ NFA โ†’ DFA โ†’ ์ตœ์†Œ DFA

๊ฐ ๋‹จ๊ณ„ ์š”์•ฝ

๋‹จ๊ณ„ ๋ฐฉ๋ฒ• ํ•ต์‹ฌ ๊ฐœ๋…
RE โ†’ NFA Thompson Construction ฮต-transition
NFA โ†’ DFA Subset Construction ฮต-closure, Move
DFA โ†’ min DFA Partition Refinement distinguishable

Subset Construction ํ•ต์‹ฌ

  • Move(T, ฮฑ): ์ƒํƒœ ์ง‘ํ•ฉ T์—์„œ ฮฑ๋กœ ์ด๋™ํ•˜๋Š” ์ƒํƒœ๋“ค
  • ฮต-closure(T): ฮต ์ „์ด๋กœ ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ƒํƒœ๋“ค
  • ๋ฐ˜๋ณต: ๋” ์ด์ƒ ์ƒํƒœ ์ถ”๊ฐ€ ์—†์„ ๋•Œ๊นŒ์ง€ (fixed-point)

Minimization ๊ณผ์ • ๋‹จ๊ณ„๋ณ„ ์š”์•ฝ

Step 1: P0 = { {s4}, {s0,s1,s2,s3} }
Step 2: b๋กœ split โ†’ P1 = { {s4}, {s0,s1,s2}, {s3} }
Step 3: b๋กœ ๋˜ split โ†’ P2 = { {s4}, {s0,s2}, {s1}, {s3} }
Step 4: ๋” ์ด์ƒ split ์—†์Œ โ†’ ์ข…๋ฃŒ

โญ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ฌธ์žฅ (์‹œํ—˜ ํ•œ ์ค„ ์š”์•ฝ)

โ€œ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๋ผ ์ƒํƒœ์˜ ํ–‰๋™(transition)์„ ๋น„๊ตํ•ด์„œ ๋‚˜๋ˆˆ๋‹คโ€

โญ split ์ ˆ๋Œ€ ๋ถˆ๊ฐ€ ์กฐ๊ฑด

์ง‘ํ•ฉ ํฌ๊ธฐ = 1 ์ด๋ฉด split ๋ถˆ๊ฐ€๋Šฅ

โญ ์ตœ์†Œ DFA์˜ ์œ ์ผ์„ฑ

์ตœ์†Œ DFA๋Š” ๊ตฌ์กฐ์ ์œผ๋กœ ์œ ์ผํ•˜๋‹ค (unique up to state names)

Categories:

Updated:

Leave a comment