<p>I want to store a list of the following tuples in a compressed format and I was wondering which algorithm gives me</p>

<ul>
<li>smallest compressed size</li>
<li>fastest de/compression</li>
<li>tradeoff optimum ("knee" of the tradeoff curve)</li>
</ul>

<p>My data looks like this:</p>

<pre><code>(&lt;int&gt;, &lt;int&gt;, &lt;double&gt;), 
(&lt;int&gt;, &lt;int&gt;, &lt;double&gt;), 
...
(&lt;int&gt;, &lt;int&gt;, &lt;double&gt;)
</code></pre>

<p>One of the two ints refers to a point in time and it's very likely that the numbers ending up in one list are close to each other. The other int represents an abstract id and the values are less likely to be close, although they aren't going to be completely random, either. The double is representing a sensor reading and while there is some correlation between the values, it's probably not of much use.</p>

Since the "time" ints can be close to each other, try to only store the first and after that save the difference to the int before (delta-coding). You can try the same for the second int, too.
Another thing you can try is to reorganize the data from [int1, int2, double], [int1, int2, double]... to [int1, int1...], [int2, int2...], [double, double...].
To find out the compression range your result will be in, you can write your data into a file and download the compressor CCM from Christian Martelock
here
. I found out that it performs very well for such data collections. It uses a quite fast
context mixing
algorithm. You can also compare it to other compressors like WinZIP or use a compression library like zLib to see if it is worth the effort.