+ *
+ * Research tells us that 80% to 95% of all spelling errors have an edit
+ * distance no greater than one. Knowing this we can optimize for most
+ * cases of mistakes without taking a performance hit. Which is what we
+ * base longer edit distances off of. Opposed to the original method of
+ * I had concieved of checking everything.
+ *
+ * A little information on additional algorithms used:
+ *
+ * Initially when I implemented this corrector, it was very slow.
+ * Need I remind you this is essentially a brute force attack on strings,
+ * and since every transformation requires dynamic memory allocations,
+ * you can easily imagine where most of the runtime conflated. Yes
+ * It went right to malloc. More than THREE MILLION malloc calls are
+ * performed for an identifier about 16 bytes long. This was such a
+ * shock to me. A forward allocator (or as some call it a bump-point
+ * allocator, or just a memory pool) was implemented. To combat this.
+ *
+ * But of course even other factors were making it slow. Initially
+ * this used a hashtable. And hashtables have a good constant lookup
+ * time complexity. But the problem wasn't in the hashtable, it was
+ * in the hashing (despite having one of the fastest hash functions
+ * known). Remember those 3 million mallocs? Well for every malloc
+ * there is also a hash. After 3 million hashes .. you start to get
+ * very slow. To combat this I had suggested burst tries to Blub.
+ * The next day he had implemented them. Sure enough this brought
+ * down the runtime by a factory > 100%
+ *
+ * Future Work (If we really need it)
+ *
+ * Currently we can only distinguishes one source of error in the
+ * language model we use. This could become an issue for identifiers
+ * that have close colliding rates, e.g colate->coat yields collate.
+ *
+ * Currently the error model has been fairly trivial, the smaller the
+ * edit distance the smaller the error. This usually causes some un-
+ * expected problems. e.g reciet->recite yields recipt. For QuakeC
+ * this could become a problem when lots of identifiers are involved.
+ *
+ * Our control mechanisim could use a limit, i.e limit the number of
+ * sets of edits for distance X. This would also increase execution
+ * speed considerably.