기계 학습
시간 제한2초메모리 제한1024 MB
길이 n 이하의 모든 이진 단어에 수락 또는 거부 표시가 주어질 때, 모든 표시를 만족하는 상태 수가 가장 적은 DFA를 만듭니다.
문제
기계 학습은 알고리즘과 컴퓨터 프로그램이 학습 예제로부터 무엇을 배울 수 있는지 연구하는 이론 컴퓨터 과학의 한 분야입니다. 이 문제에서는 기계 학습의 가장 단순한 형태를 구현합니다. 주어진 단어 집합을 올바르게 인식하도록 결정적 유한 오토마타를 학습시킵니다.
형식적으로 결정적 유한 오토마타는 로 나타냅니다. 여기서 는 유한한 입력 알파벳()이고, 는 유한한 상태 집합, 는 초기 상태, 는 허용 상태 집합, 는 전이 함수입니다.
오토마타의 입력은 의 기호로 이루어진 단어 입니다. 처음에 오토마타는 상태 에 있습니다. 매 단계마다 입력의 다음 기호 를 읽고, 현재 상태 에서 로 이동합니다. 단어 전체를 처리한 뒤 오토마타가 허용 상태에 있으면 를 허용하고, 그렇지 않으면 허용하지 않습니다.
길이가 0부터 까지인 모든 단어를 두 집합 와 로 나눕니다. 오토마타가 의 모든 단어를 허용하고 의 모든 단어를 허용하지 않으면, 이 오토마타는 주어진 분할에 맞습니다. 길이가 보다 긴 단어는 허용될 수도 있고 허용되지 않을 수도 있습니다.
주어진 분할에 맞으면서 상태 수가 최소인 오토마타를 구하세요.
입력
첫 줄에 정수 ()이 주어집니다. 이어서 개의 줄이 와 를 나타냅니다. 각 줄에는 단어 하나가 적혀 있으며, 그 단어가 에 속하면 앞에 +가, 에 속하면 앞에 -가 붙습니다. 단어는 길이순으로 정렬되어 있고, 길이가 같은 단어끼리는 사전순으로 정렬되어 있습니다.
출력
첫 줄에 최소 상태 수 ()와 초기 상태의 번호 를 출력합니다. 상태는 1부터 까지 번호가 매겨집니다.
둘째 줄에는 허용 상태의 개수 를 출력하고, 이어서 허용 상태의 번호 개를 출력합니다.
그다음 개의 줄을 출력합니다. 번째 줄에는 과 을 공백으로 구분해 적습니다.