Abstract: Disclosed is a system and method for compressing data that ranks received data characters according to their frequency of occurrence in the preceding data stream. Each time a character is input to the system, the table of rankings of each character is updated through use of a bubbler system, which does a simple exchange between the input character and a character. After a significant portion of data has been read, the table will substantially reflect the relative ranks of the various characters. A set of probability pointers divides the various ranks into several ranges, and each time a new character is input and the rank of that character is altered, the probability pointers are also updated. In this fashion, the system can readily adapt to change in the type of data in the input stream. On the decompression side, similar tables are set up, with the ranks and the probability pointers constantly being updated after the receipt of each coded symbols.