2017-12-28 11 views
0

저는 수학 문제를 파싱하고 비교하는 작은 문제에 직면하고 있습니다.수학 공식 비교

한다고 가정 우리가 다음과 같은 3 개 공식 :

  • 2*a+b*c
  • j*i+e+e
  • x+(y*z)+x

우리는 3 개 공식이 동일, 동의합니다. 다른 수식을 어떻게 비교하여 동등한 지 여부를 알 수 있습니까? 이러한 수식을 다시 작성하고 단순화하여 비교할 수있는 Java API를 알고 있습니까?

+0

https://math.meta.stackexchange.com/questions/10169/how-to-search-for-a-formula-expression은 직접 관련이 없지만 문제를 논의합니다. – barrycarter

답변

1

이 작업은 간단하지 않으며 구문 분석 트리를 이해해야합니다. https://en.wikipedia.org/wiki/Parse_tree

주 개념은 표현식의 구문 분석 트리를 작성하고 정규화하기 위해 순서가 "동일한"표현식과 같아 지도록 노드를 정렬하는 것입니다.

예를 들어, 첫 번째 표현식은 상수와 변수가 포함 된 두 제품 (*)의 합계 (+)로 구문 분석되고 다른 하나는 다른 두 변수로 구문 분석됩니다.

+ * 2 V0 * V1 V2 

모든 표현을 나타냅니다

, 당신이 상수는 변수 앞에 오는 협약을 채택하는 경우, 당신은 변수의 이름을 변경하는 경우

나무의 접두사 순회

+ * 2 a * b c 

일 것 a*2+d*f, f*a+2*b ... 예 : 2*a+a*c은 반복 변수가 있고 + * 2 V0 * V0 V1이어야합니다.


당신은 (e+e2*e된다) 용어처럼 재편성으로도 더 열심히 일을하고 있습니다. 이것은 아마도 구문 분석 트리를 사전 처리하고 동일한 하위 트리를 발견하여 얻을 수 있습니다. 지정된 경우

+ V2 V2 

지팡이 동일한 두 식의 합으로 볼 수 있고 추가적인 처리 이전

* 2 V2 

로 전환 될 수있다.


일반적인 경우가 그렇게 쉽지 않을지 확신하지 못합니다.

+0

동일한 수식 (V0, V1, V2 ...)을 사용하여 동일한 수식을 형식화하고 다시 작성할 수있는 경우 두 수식을 뺄 수 있으며 서로 취소하면 동일한 것으로 간주됩니다. – obiyadi