Найти лексикографический порядок выражения в обратной польской записи (постфикс)?

Я написал программу на python для преобразования инфиксного выражения в постфиксное выражение (также известное как обратная польская нотация). В моей задаче появляются только цифры 0-9, а также операторы * и +. Теперь мне нужно найти лексикографически самую большую строку, представляющую постфиксное уравнение. Пример:

  • Инфиксный экв: 2*4*3+9*3+5
  • Постфиксный экв: 24*3*93*+5+
  • Лекс. самый большой: 243**93*5++ ‹---- понятия не имею, как это получить

person user2898120    schedule 07.12.2014    source источник
comment
Дайте определение «лексикографически самый большой».   -  person user207421    schedule 11.02.2020


Ответы (1)


Учитывая эти ограничения (только цифры от 0 до 9, без пробелов, только умножение и суммирование), следующее будет делать то, что вы хотите:

expr1 = '2*4*3+9*3+5'
expr2 = '9*3+5+3*4*2'

def reverse_polish_nation(expr):
    terms = expr.split('+')
    facs = [ sorted(term.split('*')) for term in terms ]

    rpn_terms = ['{}{}'.format(''.join(factors),
        '*'*(len(factors)-1)) for factors in facs]
    rpn_expr = '{}{}'.format(''.join(sorted(rpn_terms)), '+'*(len(rpn_terms)-1))
    return rpn_expr

print(reverse_polish_nation(expr1), reverse_polish_nation(expr2) )
# output: ('234**39*5++', '234**39*5++')
person Oliver W.    schedule 07.12.2014