1. A method for compressing data from a source stream of data comprising a string of values, using one or more distinct computer memory addresses as workspace, each computer memory address having one or more locations to hold one or more distinct values respectively, said method comprising: (a) reading K bits from the source data stream, which are immediately prior to a current reading point in the source stream, as a memory address reference, if K is greater than zero; (b) reading N bits from the source stream as a current symbol value; (c) writing the current symbol value to replace one of the values at the memory address reference if the current symbol value does not match any of the values at the memory address reference, and writing a MISS code/value followed by the current symbol value to a compressed data stream; and (d) writing a HIT code, representing the location in the memory address reference where the value was found, to the compressed data stream if the current symbol value matches any of the values at the memory address reference.