변수를 대체하여 고유 한 출력 수


9

다음과 같은 공식이 주어집니다.

bacb
bcab
cbba
abbc

모든 수식에서 각 변수가 "0"또는 "1"로 대체 될 때 얻을 수있는 고유 한 결과 수를 찾는 알고리즘을 제공하십시오.

(k!)^2각각 2k-1변수와 k^2용어 가있는 수식 이 있습니다 . 의 점에서 무증상을 표현하십시오 k.

가장 빠른 알고리즘이 승리합니다. 동점 인 경우, 점근 메모리 사용량이 적은 솔루션이 우선합니다. 그것이 여전히 동점이라면, 첫 번째 포스트가 승리합니다.


위의 예에서 변수를 대체하여 다음 결과를 얻을 수 있습니다.

1110, 0110, 1001, 0100, 1000, 0000, 0010, 1101, 1111, 0001, 1011, 0111

정답은 12입니다. 그 중에서도 1010위의 공식을 사용하여 만들 수 없습니다.

230 , 120761446672 의 각 솔루션으로 세 가지 테스트 사례를 더 만들었습니다 .


설명 : 질문에서 k는 무엇입니까? 그냥 추상 상수입니까?
isaacg

@isaacg 예. 예를 들어 덜 적지 만 더 큰 수식의 경우 더 빠른 솔루션 간의 관계를 방지합니다.
orlp

따라서 각 문자 a, b...는 변수 입니까? 그리고 우리는 항상 고르지 않은 수의 변수를 가지고 있습니까? 변수 순서가 얼마나 길고 얼마나 많은 수식 이 주어 졌는지는 중요하지 않습니까?
flawr

@flawr 변수의 수, 항의 수, 공식의 수 사이의 정확한 관계가 질문에 나와 있습니다.
orlp

'할 수있다'는 최대 $ (k!) ^ 2 $ 수식을 얻을 수 있거나 정확히 $ (k!) ^ 2 $ 수식이있을 수 있습니까? 그 외에도 해당 사양의 알고리즘에 대한 응용 프로그램이 있습니까? 사양이 임의적 인 것처럼 보이기 때문에 그냥 묻습니다.
flawr

답변:


2

Mathematica, O (k ^ 2 (k!) ^ 2) 시간

Length[Union@@(Fold[Flatten[{StringReplace[#,#2->"0"],StringReplace[#,#2->"1"]}]&,#,Union[Characters[#]]]&/@#)]&

잘만되면 나는 시간 복잡성을 정확하게 계산했다. 입력은과 같은 수식 목록입니다 {"bacb","bcab","cbba","abbc"}. 내 컴퓨터의 모든 테스트 사례에 대해 30 초 이내에 실행되지만 누가 절대 시간을 걱정합니까?

설명:

  • 첫째 &로, 끝에는 #첫 번째 인수 를 참조 #2하고 두 번째 인수 등을 순수 함수로 만듭니다 .
  • Length[*..*] 그 안에 포함 된 목록의 길이를 가져옵니다.
  • Union@@(*..*)포함 된 목록을 가져 와서 인수로 제공하여 인수 Union의 고유 한 요소 목록을 리턴합니다.
  • *..*&/@#순수 함수를 가져 와서 수식 목록에 매핑하므로이 {a,b,c}됩니다 {f[a],f[b],f[c]}. 중첩 된 순수 함수에서 #n가장 안쪽 인수를 나타냅니다.
  • Fold[*..*&,#,*..*]누산기 함수, 시작 값 및 목록을 사용하여를 반환합니다 f[f[...[f[starting value,l_1],l_2],...],l_n].
  • Union[Characters[#]] 현재 수식의 모든 문자를 가져 와서 모든 고유 요소를 가져 와서 변수를 제공합니다.
  • Flatten[*..*]인수를 평평하게하여 {{{a},b},{{c,{d}}}}가됩니다 {a,b,c,d}.
  • {*..*,*..*}단순히 위의 두 결과를 결합하는 방법 Flatten입니다.
  • StringReplace[#,#2->"0/1"]이전 결과를 가져 와서 현재 변수를 0또는 로 대체하여 반환합니다 1.

k시간에 변수로 사용 하고 있습니까? 여전히 계승 시간! 휴!
theonlygusti

작전은 다음과 같이 말했습니다 : "무증상을으로 표현하십시오 k." 또한 GeneralUtilities`Benchmark사용 된 각 방법마다 수행해야했습니다 .
LegionMammal978

알고리즘에 대한 간단한 영어 설명을 추가 하시겠습니까? Mathematica에 익숙하지 않으므로 솔루션을 확인할 수 없습니다.
orlp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.