そんなこといったらパソコンの中身は全部0と1です。
1バイトのデータに0と1しか入っていなければ圧縮できるけど、
そんなことする前に1ビットごとに0と1を入れておいたほうが容量は小さい。
それに同じ大きさのバッファに0と1を入れておいても、並び替えをしてるから、
どのタイミングで引き算をしたかわからないので、それだけはダメで、
一つの考えとしては 適当な数値を入れておいてデコードで並び替えるたびに
デクリメントして1になったら引き算のデコード(足し算)を行う。 とかいうように
すればできそうだけど、そしたらやっぱり容量が2倍です。