Postup

Asi to jde udělat jinak i lépe, četl jsem o postupu kdy se to zvládne pouze během jednoho průchodu DFS, ale úplně mi to nešlo do hlavy, tak prezentuju svoje řešení, je to také 10/10:

Nejdříve zjištění, jestli automat přijímá FINITE nebo INFINITE jazyk

  • DFS z počátečního stavu (explicitní zásobník a while smyčka)
  • Pokud narazím na cyklus, zapíšu si u všech stavů v tom cyklu, že jsou součástí cyklu (pro připomenutí - stavy cyklu se nachází na zásobníku v části odshora až do výskytu toho stavu, na který jsme narazili a je OPEN)
  • Pokud narazím na konečný stav:
    • ke všem stavům na zásobníku zapíšu, že vedou do konečného stavu (pozor - když narazím na stav, který již vede do konečného, přestanu se zapisováním, protože všechny stavy předtím to mají již nastavené někdy odminula)
  • pokud je aktuální stav součástí cyklu a zároveň vede do konečného stavu, přeruším DFS a jdu hledat nejkratší slovo, protože mám INFINITE jazyk
  • pokud DFS doběhne bez přerušení, mám FINITE jazyk a jdu hledat nejkratší slovo

Nejkratší slovo (INFINITE jazyk):

  • BFS z počátečního stavu
  • U stavů si pamatuju, jakým terminálem jsem do nich přišel (a odkud) nebo jakým slovem se do nich dá dostat
  • Když dojdu do konečného stavu, skončím (nemá smysl pokračovat a hledat cestu do dalších konečných stavů, protože do nich nutně vede delší cesta /slovo/ než do tohohle)

Nejdelší slovo (FINITE jazyk):

  • DFS z počátečního stavu
  • Nechodím do stavů, které jsou součástí cyklu
  • U každého stavu si pamatuju příchozí vzdálenost od počátečního + to samé jako v INFINITE jazyku
  • Do stavu jdu jen v tom případě, že bych mu zvětšil příchozí vzdálenost nebo pokud je stejná, tak terminál/slovo
  • DFS nechám doběhnout celý, nijak nepřerušuju
    • po skončení vezmu slova vedoucí z finálových stavů (vedou do počátečního stavu) a vyberu nejdelší

Testovací data

Přidám testovací data, která mi pomohla odladit vytváření slov:

6 3 1

0 1 2 1 1 1 3

1 0 1 4 0

2 0 0 1 4

3 1 4 0 0

4 1 5 0 0

5 1 4 0 0

1 4

Výstup: INFINITE ac

10 2 1

0 2 2 3 1 1

1 1 4 0

2 1 5 0

3 0 1 6

4 0 1 7

5 0 1 7

6 1 7 0

7 0 1 8

8 1 9 0

9 0 1 8

3 1 3 7

Výstup: FINITE bab

courses/a4m33pal/uloha7-2013.txt · Poslední úprava: 2025/01/03 18:28 (upraveno mimo DokuWiki)
Nahoru
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0