2017-11-06 9 views
1

유한 함수 집합과 두 개의 숫자 A와 B가 주어진 경우 f(A) = B을 만족하는 합성 함수를 결정하는 가장 빠른 방법은 무엇입니까? 예를 들어기존 함수의 유한 집합에서 대상 함수를 작성하는 가장 빠른 방법

, 우리가있는 경우 :

functions = { 
    f1(x) = x - 1, 
    f2(x) = x + 1, 
    f3(x) = x * x 
} 

A = 1, B = 9

그런 다음 최적의 솔루션이 될 것이다 : f(x) = f3(f2(f2(x))). f(A) = B이고 기능은 가능한 한 적은 기능으로 구성되어 있기 때문입니다.

가장 빠른 해결 방법은 최적의 해결책이 아닐 수도 있습니다. 당신의 예에서

+0

'f1','f2' 및'f3' 함수가 고정되어 있습니까? 그래서 우리는 그것들이 작업 할 우리의 함수임을 알고있는 알고리즘을 작성합니까? 왜냐하면 가변 함수 목록을 원한다면이 질문은 대답하기가 불가능하기 때문입니다. –

+0

실수가 허용되면 (대개 함수에 대해 말할 때 가정 함), 대부분의 쌍 'A, B'는 주어진 함수에 대한 해답을 전혀 가지지 않을 것입니다. 예를 들어'A'가 적분이고'B 'A = 1, B = 1.1'과 같지 않습니다. 그러나 도메인을 정수로 제한하고'f1 (x) = 4 * x'와'f2 (x) = x * x' 함수를 취하면, 예를 들어'B , 3, 5, 6, 7, 10, ... 'A에 대한 값이 주어져도 상관 없습니다. 그래서 기능에 대한 더 많은 정보가 미리 알려지지 않았다면 대부분의 시간은 끝이 없을 것입니다. – coproc

+0

@MikePierce 예, 세트의 기능은 상관 없어도 작동 할 수있는 일반적인 솔루션이 있는지 궁금해하고 있었지만 세트의 기능은 일정합니다. –

답변

0

Breadth-first search

A=1에서 시작 f1(1) = 0, f2(1) = 2f3(1) = 1을 계산합니다. 그런 다음 B에 도달 할 때까지 계속 (f1(0), f2(0), f3(0), f1(2), ...) 계속 진행합니다. 이전에 계산 된 숫자는 무시하십시오. 최적의 솔루션이있는 경우이 솔루션을 생성합니다.

AB이 모두 정수 인 경우 항상 f1(f1(...f1(A)...) 또는 f2(f2(...f2(A)...) 형태의 솔루션이 있으므로 검색이 끝이 아닙니다.