2016-04-24 11 views
1

Vor kurzem habe ich einige Websites, für die Konvertierung der Infix zu Prefix-Notation durchlaufen und schließlich aufgezogen.Probem mit Konvertierung von Infix zu Präfix-Konvertierung

I haben die Schritte gegeben, die ich getan ..

Ex: - (1+ (2 * 3)) + (5 * 6) + (7/8)

Methode 1 : - (manuelle Konvertierung ohne Algorithmus): -

 
Step1: (1+(*23)) + (*56) + (/78) 
Step2: (+1*23) + (*56) + (/78)
Step3: +(+1*23)(*56) + (/78)
Step4: +[+(+1*23)(*56)](/78)
Step5: +++1*23*56/78 **--- Final Ans -----**

Methode 2: -

Wie pro t er Ort http://scanftree.com/Data_Structure/infix-to-prefix

 
Step1: Reverse it:- 
     ) 8/7 (+) 6 * 5 (+)) 3 * 2 (+ 1 ( 

Step2: Replace the '(' by ')' and vice versa: 
     (8/7) + (6 * 5) + ((3 * 2) + 1) 

Step3: Convert the expression to postfix form:- 
     8 7/6 5 * + 3 2 * 1 + + 

Step4: Reverse it 
     + + 1 * 2 3 + * 5 6/7 8  --- Final Ans ----- 

So, hier habe ich total aufgehängt.

Könnte jemand bitte etwas Licht auf folgende Dinge bereitstellen: -

  1. auf, wo ich in den obigen zwei Methoden schief ging
  2. , die die richtige Antwort

so ist, ich kann in der Lage um das Konzept besser zu verstehen.

Vielen Dank im Voraus.

+2

I denke, dass beide Antworten richtig sind - erinnere dich an a + b + c = a + (b + c) = (a + b) + c –

Antwort

1

Ihre Methode ist nicht korrekt, schauen Sie auf den Kommentar, es heißt (a + b) + c = a + (b + c). Was ist mit (a + b) * c? (a + b) * c != a + (b * c). Nach Ihrem manuellen Algorithmus legen Sie die letzte + ist nach vorne platziert. Es ist nicht richtig. Wenn Sie * anstelle der letzten + verwenden, wo haben Sie es gesagt? Denken Sie darüber nach, dann können Sie das Problem mit Ihrem Algorithmus leicht finden. Ein anderer Algorithmus zur Lösung dieses Problems ist nur Klammern, bevor Sie fortfahren. Ersetzen Sie jede linke Klammer durch den Operator darin. Beispiel, ((1+(2*3)) + ((5*6) + (7/8))) dann wird es ++1*23+*56+/78. Ihr Algorithmus ist korrekt, wenn der Vorrang des Operators im Inneren gleich ist. Wenn nicht, wird es scheitern.

HINWEIS: Ihre Antwort kann auch durch die Anordnung der Klammern erhalten werden. (((1+(2*3)) + (5*6)) + (7/8)) dann wird es +++1*23*56/78. Aber wenn der letzte ist * anstelle von + dann funktioniert es nicht.

+0

Hallo, Danke für die Antwort. Sie wollten sagen, dass Methode 1 falsch ist und Methode 2 richtig ist ... Aber im Allgemeinen (a + b) wird auf + ab zurückgebracht? Und auch, ich habe Ihren Shortcut-Trick gesehen. Es ist einfacher, das Ding zu machen. Aber ich möchte nur wissen, welcher Schritt die Methode 1 dazu bringt, sich richtig zu verhalten. Danke im Voraus. – NANDAKUMAR

+0

Es gibt eine Mehrdeutigkeit in Schritt 4. Sie können das "+" an zwei Stellen platzieren. Sie haben eine von diesen zwei Optionen gewählt. Wenn jedoch eine Operator-Priorität vorhanden ist, ist nur eine Option verfügbar. Das ist im Fall von '*', Sie erhalten nur eine Option. Im Allgemeinen, wenn Sie ein Problem wie dieses bekommen, überprüfen Sie, was passiert, wenn der Operator Vorrang hat. Entsprechend platzieren Sie Ihren Betreiber. In diesem Fall steht '+' vor '*' und nach '3'. – aaroh

+0

Hallo Aaroh. Ich verstehe. Aber, Könnten Sie plls erklären die Linie, >> "Aber wenn Operator Vorrang dort ist, dann ist nur eine Option verfügbar." mit einigen kleinen Beispielen, damit ich mehr fassen kann. Vielen Dank. – NANDAKUMAR

1

(b * b - 4 * a * c)/(2 * c) GLEICHUNG - 1;
Jetzt werde ich das mathematisch lösen, indem ich verschiedene Variablen ersetze und 2 Terme gleichzeitig mache.
=> x = bb *; y = 4a *; z = 2c *
diese über die Substitution von erstem Mal, 1 in eq verwendet
(x - y * c)/(z)
wieder die Substitutionen mit neuen Variablen zu tun.
=> i = yc *;
(x - i)/z
=> j = XI-;
j/z
Nun ist dies hier der Basisfall lösen Sie es dann ersetzen Sie alle Variablen entsprechend zurück.
jz/
Jetzt Substitution zurück

xi- 2c */
bb * yc * - 2c */

bb * 4a * c * -2a */