  It is a major unsolved problem as to whether unknot recognition - that is,
testing whether a given closed loop in R^3 can be untangled to form a plain
circle - has a polynomial time algorithm. In practice, trivial knots (which can
be untangled) are typically easy to identify using fast simplification
techniques, whereas non-trivial knots (which cannot be untangled) are more
resistant to being conclusively identified as such. Here we present the first
unknot recognition algorithm which is always conclusive and, although
exponential time in theory, exhibits a clear polynomial time behaviour under
exhaustive experimentation even for non-trivial knots.
  The algorithm draws on techniques from both topology and integer / linear
programming, and highlights the potential for new applications of techniques
from mathematical programming to difficult problems in low-dimensional
topology. The exhaustive experimentation covers all 2977 non-trivial prime
knots with <= 12 crossings. We also adapt our techniques to the important
topological problems of 3-sphere recognition and the prime decomposition of
3-manifolds.
