만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

기계 학습

시간 제한2초메모리 제한1024 MB

요약
길이 n 이하의 모든 이진 단어에 수락 또는 거부 표시가 주어질 때, 모든 표시를 만족하는 상태 수가 가장 적은 DFA를 만듭니다.
난이도

어려움10점 중 9점

유형
백트래킹, 트라이, 문자열
정답자
아직 제출이 없습니다

문제

기계 학습은 알고리즘과 컴퓨터 프로그램이 학습 예제로부터 무엇을 배울 수 있는지 연구하는 이론 컴퓨터 과학의 한 분야입니다. 이 문제에서는 기계 학습의 가장 단순한 형태를 구현합니다. 주어진 단어 집합을 올바르게 인식하도록 결정적 유한 오토마타를 학습시킵니다.

형식적으로 결정적 유한 오토마타는 ⟨Σ,U,s,T,φ⟩\langle\Sigma, U, s, T, \varphi\rangle로 나타냅니다. 여기서 Σ\Sigma는 유한한 입력 알파벳(Σ={0,1}\Sigma = \{0, 1\})이고, UU는 유한한 상태 집합, s∈Us \in U는 초기 상태, T⊂UT \subset U는 허용 상태 집합, φ:U×Σ→U\varphi : U \times \Sigma \rightarrow U는 전이 함수입니다.

오토마타의 입력은 Σ\Sigma의 기호로 이루어진 단어 α\alpha입니다. 처음에 오토마타는 상태 ss에 있습니다. 매 단계마다 입력의 다음 기호 cc를 읽고, 현재 상태 uu에서 φ(u,c)\varphi(u, c)로 이동합니다. 단어 전체를 처리한 뒤 오토마타가 허용 상태에 있으면 α\alpha를 허용하고, 그렇지 않으면 허용하지 않습니다.

길이가 0부터 nn까지인 모든 단어를 두 집합 S+S^+와 S−S^-로 나눕니다. 오토마타가 S+S^+의 모든 단어를 허용하고 S−S^-의 모든 단어를 허용하지 않으면, 이 오토마타는 주어진 분할에 맞습니다. 길이가 nn보다 긴 단어는 허용될 수도 있고 허용되지 않을 수도 있습니다.

주어진 분할에 맞으면서 상태 수가 최소인 오토마타를 구하세요.

입력

첫 줄에 정수 nn(1≤n≤121 \le n \le 12)이 주어집니다. 이어서 2n+1−12^{n+1}-1개의 줄이 S+S^+와 S−S^-를 나타냅니다. 각 줄에는 단어 하나가 적혀 있으며, 그 단어가 S+S^+에 속하면 앞에 +가, S−S^-에 속하면 앞에 -가 붙습니다. 단어는 길이순으로 정렬되어 있고, 길이가 같은 단어끼리는 사전순으로 정렬되어 있습니다.

출력

첫 줄에 최소 상태 수 uu(u≥1u \ge 1)와 초기 상태의 번호 ss를 출력합니다. 상태는 1부터 uu까지 번호가 매겨집니다.

둘째 줄에는 허용 상태의 개수 tt를 출력하고, 이어서 허용 상태의 번호 tt개를 출력합니다.

그다음 uu개의 줄을 출력합니다. ii번째 줄에는 φ(i,0)\varphi(i, 0)과 φ(i,1)\varphi(i, 1)을 공백으로 구분해 적습니다.

예제1

  1. 예제 1

    입력
    2
    +
    +0
    -1
    +00
    -01
    -10
    -11
    
    예상 출력
    2 1
    1 1
    1 2
    2 2