Algoritmo de Simplificação para Notação Polonesa Reversa

Um par de dias atrás eu brinquei comBefunge que é uma linguagem de programação esotérica. Befunge usa uma pilha LIFO para armazenar dados. Quando você escreve programas, os dígitos de 0 a 9 são, na verdade, instruções Befunge, que empurram os valores correspondentes para a pilha. Então, por exemplo, isso empurraria um 7 para empilhar:

34+

Para enviar um número maior que 9, os cálculos devem ser feitos com números menores ou iguais a 9. Isso produziria 123.

99*76*+

Enquanto resolveProblema de Euler 1 com o Befunge eu tive que empurrar o grande número 999 para a pilha. Comecei a me perguntar como poderia realizar essa tarefa com o mínimo de instruções possível. Escrevendo um termo na notação infixa e tirando os fatores comuns, eu inventei

9993+*3+*

Pode-se também simplesmente multiplicar dois números de dois dígitos que produzem 999, e.

39*66*1+*

Eu pensei sobre isso por enquanto e, em seguida, decidi escrever um programa que coloca a menor expressão de acordo com essas regras na notação de polimento inverso para qualquer inteiro dado. Isto é o que eu tenho até agora (escrito em NodeJS com underscorejs):

var makeExpr = function (value) {
    if (value < 10) return value + "";
    var output = "", counter = 0;
    (function fn (val) {
        counter++;
        if(val < 9) { output  += val; return; };
        var exp = Math.floor(Math.log(val) / Math.log(9));
        var div = Math.floor(val / Math.pow(9, exp));
        _( exp ).times(function () { output += "9"; });
        _(exp-1).times(function () { output += "*"; });
        if (div > 1) output += div + "*";
        fn(val - Math.pow(9, exp) * div);    
    })(value);
    _(counter-1).times(function () { output+= "+"; });
    return output.replace(/0\+/, "");
};

makeExpr(999);
// yields 999**99*3*93*++

Esse trecho de código constrói a expressão ingenuamente e é obviosamente longo. Agora minhas perguntas:

Existe um algoritmo para simplificar expressões na notação de polimento inverso?A simplificação seria mais fácil na notação infixada?Pode uma expressão como9993+*3+* ser prova para ser o menor possível?

Eu espero que você possa dar algumas ideias. Desde já, obrigado.

questionAnswers(4)

yourAnswerToTheQuestion