I decided to try some experiments with order 0-1-2-3-5 models like ppmx but using an ISSE chain rather than PPM. This ZPAQ model uses 269 MB, to get it close to the 300 MB used by ppmx. Context mixing compresses a little smaller but is 4-6 times slower.
Code:
(i5.cfg)
comp 3 3 0 0 5 (hh hm ph pm n)
0 icm 5 (order 0,1,2,3,5 chain)
1 isse 13 0
2 isse 20 1
3 isse 20 2
4 isse 21 3
(5 mix 8 0 5 16 255) (to uncomment mixer, change n from 5 to 6 above)
hcomp
c++ *c=a b=c a=0 (save in rotating buffer M)
d= 1 hash *d=a (order 1)
d++ b-- hash *d=a (order 2)
d++ b-- hash *d=a (order 3)
d++ b-- hash b-- hash *d=a (order 5)
halt
post
0
end
ppmx enwik8 100000000 -> 23941730 in 34.4 sec
zpaq oci5 -> 22619665 in 152 sec (without mixer)
zpaq oci5 -> 22310984 in 178 sec (with mixer)
ppmx calgary.tar 3152896 -> 797832 in 1.5 sec
zpaq oci5 -> 742959 in 5.5 sec (without mixer)
zpaq oci5 -> 729767 in 6.3 sec (with mixer)
Also, using straight mixing (order 0) works a little better than using an ISSE chain by itself, but not as well as combining both techniques.
Code:
comp 3 3 0 0 6 (hh hm ph pm n)
0 icm 5 (orders 0,1,2,3,5)
1 icm 13
2 icm 20
3 icm 20
4 icm 21
5 mix 8 0 5 16 255
(rest is unchanged)
enwik8 -> 22467590 in 159 sec
calgary.tar -> 740989 in 5.6 sec