2012-03-16 3 views
1

식의 파생어를 표현하는 새 트리를 반환하는 메서드를 구현하려고합니다. 나는 처녀 자리에 정확한 표식뿐만 아니라 표식 표현 트리를 가지고있다. 나는 노드가 상수 또는 숫자 일 때 미분 규칙과 기본 경우를 사용하여 재귀 적으로이 작업을 수행 할 수 있음을 알고 있습니다. 하지만 새로운 표현을 저장하는 방법에 대해 머리를 감싸는 데 문제가 있습니다.파생 식 트리 Java

정확한 답변이 필요하지 않습니다. 새로운 표현을 저장하는 방법에 대한 지침이나 권장 사항이 있습니까?

다이어그램이 도움이됩니다. 감사합니다. 그러나 여전히 작업 코드를 구현하는 데 문제가 있습니다.

if(this.getValue().equals("mult")){ 
     this.deepCopy().setValue("add"); 
     this.deepCopy().getRightChild().setValue("mult"); 
     this.deepCopy().getLeftChild().setValue("mult"); 
     // not sure what to recursively here! 

     } 
+0

현재 어떤 작업을하고 있으며 어떤 코드가 있습니까? 프로그래밍 언어로 질문에 태그를 지정하지 않았습니다. – Kaz

답변

0

확실한 대답은 수식의 상징적 조작을 위해 고안된 언어를 사용하는 것입니다. 힌트 : 그것은 1960 년 이전에 시작되었으며, 그것은 네 글자입니다. http://www.autodiff.org/

기본적으로

http://www.cs.berkeley.edu/~fateman/papers/ADIL.pdf

+0

죄송합니다. 자바에서 언급 했어야합니다. – user1205722

+1

조난. :) – Kaz

+0

정말 파이썬 링크를 주셔서 감사하지만 그 언어는 절대적으로 불행히도 내게 외국인입니다! – user1205722

0

당신이 파생 상품을 계산, 원래 트리의 루트에서 시작하여 아래로 당신의 방법을 작동 :

야는 몇 가지 새로운 기술은이 지역에있다가 나타납니다, 이것 좀 봐 노드가 필요할 때. 예를 들어, 이후 D의 FG = f'g + FG '곱셈 노드, 당신 것 출력 제품의 합계 :

  ....     .... 
      \      \ 
       *      + 
      /\   ->  /\ 
      F G     * * 
           /\/\ 
           F' G F G' 

그리고에서 어디 F 어떻게해야합니까' '와 G를? . 방금 곱셈에 대한 하위 트리를 입력해야 멀리 떨어져 아니에요 원칙 : 내가 말을해야하지만

Node right = this.deepCopy().getRightChild(); 
Node left = this.deepCopy().getLeftChild(); 
right.setLeftChild(derivative(this.getLeftChild())) // F' 
right.setRightChild(this.getRightChild()))   // G 
left.setLeftChild(this.getLeftChild())    // F 
left.setRightChild(derivative(this.getRightChild()))) // G' 

는 API가 조금 보이는

업데이트에서 재귀 차기 곳이다 이상한. deepCopy은 항상 동일한 객체를 반환합니까? 그 이름은 매번 새로운 사본을 만들 것을 제안합니다.

+0

내 의견에 코드를 올바르게 삽입하는 방법을 알 수는 없지만 원래 질문을 업데이트했습니다. 내가 완전히 벗어난거야? – user1205722

+0

업데이트 됨. 주석은 광범위한 서식을 허용하지 않습니다. – Joni