2013-06-29 9 views
2

두 대수 표현식이 동일한 지 여부를 테스트하는 프로그램을 작성해야합니다. MDAS 선행 및 괄호 그룹화를 따라야합니다. 우선 순위에 대한 문제를 해결하기 위해이 식의 중위 수식 변환기에 중위 (infix)를 구현해야한다고 생각합니다. 그러나 이렇게함으로써, 나는 그들의 동등 함을 결론 지을 수 없었다.두 대수 표현식의 동등성 테스트 알고리즘

과 같아야 프로그램 : 사용자 입력 : A * (A + B) = A *의 A + A * B 출력 : 내가 컴퓨터 대수를 사용하는 것이 허용되지 않아이 문제에 대한

등가 시스템 또는 외부 라이브러리. 제발 실제 코드를 게시하지 마십시오.이 문제를 해결하기위한 아이디어가 필요합니다.

+0

당신의 접근 방식이 작동하지 않았다는 것을 설명해 주시겠습니까? 두 표현식을 같은 표준 형식에 넣으면 두 트리 구조를 순회하고 비교하여 비교할 수 있어야한다고 생각합니다. – lurker

+0

'1/(a-a)'와'2/(a-a)'의 두 대수 표현식에 대해 프로그램에서 표시해야하는 결과는 무엇입니까? –

+0

'x + y'와'a + b'도 동일합니까? – pkuderov

답변

1

아이디어입니다.
빌딩을 먼저 구현해야합니다. 이는 자연스러운 표현 표현이기 때문입니다.
그러면 대괄호 등을 사용하여 연관 또는 분포 대수 특성을 사용하여 단순화해야합니다.
그러면 나무를 비교해야합니다. 교환 작업 등에서 모든 가지 순열을 처리해야하기 때문에 명확하지 않습니다. 예 : 당신은 그들을 정렬 할 수 있습니다 (나는 평균을 의미합니다) 그리고 평등을 비교하십시오. 또한 매개 변수의 이름을 바꿀 수 있다는 점을 명심해야합니다. 즉, a + b는 x + y와 같아야합니다.

+0

수식 트리를 구축 할 때 수식 우선 순위가 손상되지 않도록 후위 표기법을 사용해야합니까? –

+0

@RomelioTavasJr. 그렇습니다. 접두사 또는 접미사 표기법으로 변환하는 것이 좋습니다. 또는이 방법을 사용하여 즉시 트리를 작성할 수 있습니다. – pkuderov

1

표현식을 평가할 수없는 경우 표현식 트리로 구문 분석해야합니다.

그 후, 나는 (b - c)가 * b - a * c가되도록 모든 구성원을 곱하거나 나누어서 모든 괄호를 제거 할 것입니다.

그런 다음 모든 표현식을 문자열로 다시 변환하여 모든 멤버를 사전 순으로 정렬 (a * b, b * a 제외)하고 모든 공백을 제거하고 문자열을 비교하십시오.