아직 정확한지는 확실하지 않지만, 적어도 가까운 것은 좋겠다. 우리는 동적 프로그래밍 솔루션을 고려합니다. 알파벳 1에서 P까지의 문자 인 1에서 N까지의 단어를 열거합니다. 모든 하위 솔루션 측면에서 (n, p)를 풀 수 있어야합니다. 몇 가지 경우를 고려합니다.
가장 단순한 경우는 n 번째 단어가 (n-1, p)의 해에 이미 사전에있는 경우입니다. 우리는 스스로 운이 좋다고 계산하고, 단어 하나를 덮고, 사전을 변경하지 않고 남겨 둡니다 (ddictionary는 여기에서 일부 문자 집합을 나타냅니다).
대신에 n 번째 단어가 (n-1, p)에 의해 주어진 사전에 없다고 가정하십시오. 그런 다음 사전 (n-1, p)을 해결하는 사전이 (n, p)에 대한 사전이거나 n 번째 단어가 솔루션에 있습니다. 그래서 우리는 n 번째 단어를 명시 적으로 포함하는 솔루션을 찾습니다. 그래서, 우리는 고려하고있는 사전에 n 번째 단어의 모든 문자를 추가합니다. 우리는 이제 모든 이전의 해답을 (n-1, i) 형식으로 검색합니다. 여기서 i는 p-1 이하입니다. 우리는 | d (n-1, i) U d (n) |가 0이되도록 i의 최대 값을 찾고있다. < = p. 여기서 d (n-1, i)는 해당 해와 연관된 사전을 의미하고, d (n)은 단순히 n 번째 단어의 모든 문자와 관련된 사전을 의미합니다. 평이한 영어로, 우리는 새로운 해결책을 사용하여 새로운 단어에 맞는 작은 값의 p로 최상의 솔루션을 찾습니다. 우리가 i의 가치를 발견하면 우리는 규모를 측정하고있는 사전들을 결합합니다. 이 집합의 크기가 여전히 p가 아니면 앞에서 설명한 과정을 반복합니다. 이 기법으로 n 번째 단어를 다루는 (또는 이전의 모든 솔루션을 통해 반복되는) 크기 p 인 사전을 만들었 으면, 우리는 그 범위를 계산하고 그것을 (n-1, p), 우리는 더 나은 것을 선택합니다. 넥타이가 있다면, 우리는 둘 다 골라냅니다.
Im이 솔루션의 정확성을 완전히 확신하지는 못했지만 올바른 것으로 생각됩니다. 생각?
P는 얼마나 커질 수 있습니까? 그리고 얼마나 많은 별개의 글자들이 (전체적으로 말하면) 있습니까? – kraskevich
정확히 어떻게 알아내는 데 열심히 노력하고 있지만 사소하지는 않습니다. 배낭 문제에 대한 동적 프로그래밍 의사 다항식 솔루션을 살펴보기는하지만이 정맥을 시도 할 것을 권합니다. –
어떻게 질문의 이전 버전은 9 downvotes를받을 수 있었고,이 노골적인 두 번째 시도는 10 upvotes를 받았습니다? – Marco13