La domanda è equivalente alla domanda di conteggio del numero di ordini topologici per la data BST.
Ad esempio, per il BST
10
/\
5 20
\7 | \
15 30
l'insieme di ordinamenti topologici possono contare a mano come questo: 10 inizia ogni ordinazione. Il numero di ordini topologici per la sottostruttura che inizia con 20 è due: (20, 15, 30) e (20, 30, 15). La sottostruttura che inizia con 5 ha solo un ordine: (5, 7). Queste due sequenze possono essere intercalate in modo arbitrario, portando a 2 x 10 interlacciamenti, producendo quindi venti ingressi che producono la stessa BST. Il primo 10 sono elencati di seguito per il caso (20, 15, 30):
10 5 7 20 15 30
10 5 20 7 15 30
10 5 20 15 7 30
10 5 20 15 30 7
10 20 5 7 15 30
10 20 5 15 7 30
10 20 5 15 30 7
10 20 15 5 7 30
10 20 15 5 30 7
10 20 15 30 5 7
il caso (20, 30, 15) è analogo --- è possibile verificare che uno qualsiasi dei seguenti ingressi produce la stessa BST.
Questo esempio fornisce anche una regola ricorsiva per calcolare il numero degli ordini. Per una foglia, il numero è 1. Per un nodo non foglia con un figlio, il numero è uguale al numero di ordini topologici per il bambino. Per un nodo non foglia con due bambini con dimensioni di sottostruttura | L | e | R |., entrambi con L e R ordinamenti, risp, il numero è uguale a
l x r x INT(|L|, |R|)
Dove INT è il numero di possibili interleavings di | L | e | R | elementi. Questo può essere calcolato facilmente da (| L | + | R |)!/(| L |! X | R |!). Per l'esempio precedente, otteniamo il seguente calcolo ricorsivo:
Ord(15) = 1
Ord(30) = 1
Ord(20) = 1 x 1 x INT(1, 1) = 2 ; INT(1, 1) = 2!/1 = 2
Ord(7) = 1
Ord(5) = 1
Ord(10) = 1 x 2 x INT(2, 3) = 2 x 5!/(2! x 3!) = 2 x 120/12 = 2 x 10 = 20
Questo risolve il problema.
Nota: questa soluzione presuppone che tutti i nodi nel BST dispongano di chiavi diverse.
Perché è necessario il non-determinismo? – anukul
Non lo è, davvero. Pensavo molto al nondeterminismo nel 2009. Si adatta bene a questo problema: provare una cosa, produrre il risultato, quindi tornare a uno stato precedente (dove lo stato è (insieme di nodi visitati, percorso finora)). – Greg