유전자 프로그래밍 작업을하는 동료 가 다음과 같은 질문을했습니다. 처음에는 욕심 많은 접근 방식으로 해결하려고 시도했지만 두 번째 생각에는 욕심 알고리즘에 대한 반례를 발견했습니다. 그래서 여기서 언급 할 가치가 있다고 생각했습니다.
표현식 트리로 표시되는 두 개의 다항식을 고려하십시오. 예를 들어, 및 아래 도시된다를
규칙 :
- 각 노드는 변수 이름 ( ), 숫자 또는 연산 (+,-, ×)입니다.
- 트리의 순서대로 순회하면 유효한 다항식이 발생합니다.
- 작업 노드의 각도는 2입니다. 다른 노드의 각도는 0입니다. 모든 노드의 각도는 1입니다 (루트 제외, 각도는 0 임).
트리의 노드 N에서 다음과 같이 기본 조작 을 정의하십시오 .
- 기본 조작으로 노드의 레이블을 변경할 수 있습니다. 예를 들어, 를 3으로 변경하거나 +를 로 변경할 수 있습니다 .
- 기본 작업은 N 위에 식 트리를 만들 수 있습니다 (아래 예 참조).
유형 1 의 기본 연산 비용은 1 입니다. 유형 2 의 비용 은 새로 작성된 표현식 트리의 {+,-, ×} 연산 수와 같습니다.
유형 2의 예 : 노드 N 위에 빌드 된 표현식 트리는 두 가지 연산 (-및 ×)을 사용하므로 다음 기본 연산의 비용은 2입니다.
T1과 T2는 다항식을 나타내는 두 개의 표현 트리가되게하십시오. T1과 T2 의 거리 를 다음과 같이 정의하십시오 . T1을 T2로 변환하기위한 기본 조작의 최소 비용. 변환 된 트리가 T2와 동일한 구조를 가질 필요는 없습니다. 우리는 단지 T2와 같은 다항식을 계산하기를 원합니다. (예는 주석을 참조하십시오.)
문제 : T1과 T2가 주어지면 거리를 계산하는 알고리즘이 제시됩니다.
예 1 : 이 게시물의 시작 부분에 T1과 T2를 두 개의 트리로 표시합니다. 오른쪽 트리를 왼쪽 트리로 변환하기 위해 × 위에 비용 트리 3을 만들고 4를 1로 변경할 수 있습니다 (총 비용은 4 임).