what does a compression algorithm do?