Disambiguate
Description
This operation disambiguates a weighted transducer. The result will be
an
equivalent FST that has the property
that no two successful paths have the same input labeling.
For this algorithm,
epsilon transitions are treated as regular symbols (cf.
RmEpsilon).
The transducer must be
functional. The weights must be (weakly)
left divisible (valid for TropicalWeight and LogWeight for instance) and
zero-sum-free.
Usage
template <class Arc>
void Disambiguate(const Fst<Arc> &ifst, MutableFst<Arc> *ofst);
|
Examples
A
:
(TropicalWeight)
Disambiguate of A
:
Disambiguate(A, &out);
fstdisambiguate a.fst out.fst
Determinize of A
:
(For comparison since
deterministic implies
unambiguous.)
Complexity
Disambiguate
:
- Disambiguate: exponential (polynomial in the size of the output)
- Non-disambiguable: does not terminate
The disambiguable automata include all unweighted, all acyclic and all determinizable input. There are disambiguable automata that are not determinizable.
See Also
Determinize,
RmEpsilon
References