BOB JENKINS' HOMFLY POLYNOMIAL PROGRAM rjenkins@cs.berkeley.edu This is the code for the master's thesis of Bob Jenkins at CMU. The algorithm works by dynamic programming. The normal approach creates a binary tree (each node an intermediate knot; all the leaves unlinks). My approach collects nodes with the same intermediate knot, sums their polynomials thus far, and continues on. In fact, it decides which crossings to operate on in an attempt to maximize the number of duplicates. The resulting algorithm is factorial in time and space on the max-min cross-section of the knot, which is the square root of the number of crossings or less. Given the max cross section, it is only linear on the number of crossings. (You can have lots and lots of crossings, as long as the cross section is small.) A Sun 3 tends to die on cross sections of more than 18 strings (9 in, 9 out). - Bob Jenkins Most common algorithm repeatedly divides the knot, whereas his uses increasing circles to cover crossings. He claims it is a lot faster. The major drawback of his implementation, until recently, had been the amount of space it used. However, he now has a garbage collection algorithm that is able to reclaim most of the space. (I hope we are talking about the same computation: Bob said that knots of ~95 crossings had been computed, which is much larger than I remembered.) I've always put all the .c, .h, .txt, etc files in a single directory. Compile this program with the makefile; the executable will be named homfly. When the program prompts you for a knot file, borromean.txt (no quotes, no leading pathname, just borromean.txt) is a legal response. The program prints out some diagnostics (how much work it did to handle each crossing), then prints the polynomial for the given link. The file knot.h describes the format of knot files. There are no additional features to this program; there is no other documentation. I have not yet published a paper describing how this works. I expect to write such a paper over Christmas break.