Я работаю над генератором таблицы истинности для одного из моих заданий по дискретной математике. Мне нужно реализовать алгоритм маневровой станции, и я совершенно потерялся, делая это. Моя проблема заключается в реализации алгоритма маневровой станции. Сначала я покажу, какие ресурсы я просматривал, затем свою проблему, затем свой код, который я начал.
То, что мне действительно нужно... Я знаю, что это требует многого. Но это упрощенная версия алгоритма маневровой станции. Я теряюсь по частям в примере из Википедии, когда используются обозначения, такие как o1 o2. Что мне действительно нужно, так это то, что кто-то объяснит шаг за шагом, как это применить. Я тоже не понимаю, как работает нотация RPN .. Но об этом я могу прочитать сейчас.
- Реализация закрытого двора:
http://www.technical-recipes.com/2011/a-mathematical-expression-parser-in-java/#more-1658 - Алгоритм закрытого двора Википедии:
http://en.wikipedia.org/wiki/Shunting-yard_algorithm - Чья-то проблема с stackoverflow
Проблемы с алгоритмом маневровой станции - Базовая реализация
Создание таблиц истинности в Java
Вот пример ввода:
A -> B
(C)
:. Ф
Я должен сгенерировать ввод, который показывает:
ABCA->BF
TTT--T---T
TFT--F---F
FTT--T--- T
FFT--T---F
TTF--T---F
TFF--F---F
FTF--T---F
FFF- -Т---Ф
import java.util.Stack;
import java.util.ArrayList;
public class ShuttingYard{
private static final char THEREFORE = '>';
private static final char AND = '&';
private static final char OR = '|';
public static String inputToReversePolishNotation(String input)
{
char[] tokens = input.toCharArray();
ArrayList<String> output = new ArrayList<String>();
Stack<String> oppStack = new Stack<String>();
for(int i = 0; i < tokens.length; i++)
{
}
return null;
}
public static boolean isLogicOperator(char input)
{
switch(input)
{
case THEREFORE:
return true;
case AND:
return true;
case OR:
return true;
default:
return false;
}
}
}