<p>One tradition way to represent knots is via knot diagrams.  For a discussion of knot diagrams, see "Knots, links, braids and 3-manifolds" by Prasolov and Sossinsky</p>

<p>The program SnapPea represents knots in the three-sphere by converting a given knot diagram into a triangulation of the knot's complement.  The triangulation simplification techniques in SnapPea appear to recognize the unknot within a second, for all "human-sized" knot diagrams. For the software SnapPy (Python upgrade of SnapPea) and much else, see the website CompuTop, maintained by Nathan Dunfield. </p>

<p>Ivan Dynnikov in his paper "Three-page approach to knot theory" has given a new and very interesting data structure for representing knots.  This also recognizes unknots very quickly, and has led to interesting developments in Heegaard Floer homology -- see the discussions there on grid-links. </p>

CC BY-SA 3.0
2014-02-24T11:42:33.257Z
2014-02-24T12:23:45.247Z
2014-02-24T12:23:45.247Z
Sam Nead
<p>The most natural ways to represent knots are either to embed them piecewise linearly in $\mathbb{R}^3$ (just store the coordinates of the vertices and where you want to put segments) (any tame knot can be embedded piecewise linearly) or with a knot diagram, i.e. storing a projection on $\mathbb{R}^2$ as a graph where at every crossing you specify which strand is above.</p>

<p>As Suresh pointed out, checking knot equivalence is highly non-trivial (not known to be in P) but experimental results for unknot recognition are <a href="http://arxiv.org/abs/1211.1079/">polynomial-like</a> -- knot equivalence looks much harder though. If you are looking for software, peek at <a href="http://regina.sourceforge.net/">Regina</a> .</p>

CC BY-SA 3.0
2014-02-24T10:59:31.770Z
2014-02-24T10:59:31.770Z
Arnaud
<p>Is there a documented way to compute knots? (circumferences embedded in a 3-dimensional Euclidean space).</p>

<p>I mean, a datatype to represent them, and an algorithm to determine if two instances of the datatype represent the same knot.</p>

<p>If the answer is positive, what about the complexity of that problem?</p>

CC BY-SA 3.0
2014-02-24T06:24:34.297Z
Even checking if a given diagram represents the unknot is a hard problem: http://en.wikipedia.org/wiki/Unknotting_problem
Suresh Venkat
CC BY-SA 3.0
2014-02-24T11:24:32.837Z
It is possible to represent knots as programs: see [this](http://arxiv.org/pdf/1009.2107v1.pdf) paper by Meredith and Snyder. In that representation, knots are
ambient isotopic whenever their encodings are weakly bisimilar.
Martin Berger
<ds.algorithms><computability>
How can I compute knots?
jota.191
# How can I compute knots?

(Asked by: username_0 on 2014-02-24)

Is there a documented way to compute knots? (circumferences embedded in a 3-dimensional Euclidean space).

I mean, a datatype to represent them, and an algorithm to determine if two instances of the datatype represent the same knot.

If the answer is positive, what about the complexity of that problem?

**Tags:** ds.algorithms, computability

> **Comments:**
> **username_1**: Even checking if a given diagram represents the unknot is a hard problem: http://en.wikipedia.org/wiki/Unknotting_problem  
> **username_2**: It is possible to represent knots as programs: see [this](http://arxiv.org/pdf/1009.2107v1.pdf) paper by Meredith and Snyder. In that representation, knots are ambient isotopic whenever their encodings are weakly bisimilar.  

---

## 2 answers

### Answer by username_4 on 2014-02-24. Score: 12 | Accepted answer

The most natural ways to represent knots are either to embed them piecewise linearly in $\mathbb{R}^3$ (just store the coordinates of the vertices and where you want to put segments) (any tame knot can be embedded piecewise linearly) or with a knot diagram, i.e. storing a projection on $\mathbb{R}^2$ as a graph where at every crossing you specify which strand is above.

As Suresh pointed out, checking knot equivalence is highly non-trivial (not known to be in P) but experimental results for unknot recognition are [polynomial-like](http://arxiv.org/abs/1211.1079/) -- knot equivalence looks much harder though. If you are looking for software, peek at [Regina](http://regina.sourceforge.net/) .


---

### Answer by username_3 on 2014-02-24. Score: 10

One tradition way to represent knots is via knot diagrams. For a discussion of knot diagrams, see "Knots, links, braids and 3-manifolds" by Prasolov and Sossinsky

The program SnapPea represents knots in the three-sphere by converting a given knot diagram into a triangulation of the knot's complement. The triangulation simplification techniques in SnapPea appear to recognize the unknot within a second, for all "human-sized" knot diagrams. For the software SnapPy (Python upgrade of SnapPea) and much else, see the website CompuTop, maintained by Nathan Dunfield.

Ivan Dynnikov in his paper "Three-page approach to knot theory" has given a new and very interesting data structure for representing knots. This also recognizes unknots very quickly, and has led to interesting developments in Heegaard Floer homology -- see the discussions there on grid-links.


---

