<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Jiˇr´ı Walder</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Michal Kra´tky´</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Jan Platoˇs Jir Walder</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Michal Kratky</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Jan Platos</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Department of Computer Science VS</institution>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>uT1e5ch</institution>
          ,
          <addr-line>nOicstarlaUvan-ivPeorrsuitbya,ofCOzescthraRvaepublic</addr-line>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2010</year>
      </pub-date>
      <fpage>72</fpage>
      <lpage>83</lpage>
      <abstract>
        <p>Data compression has been widely applied in many data processing areas. Compression methods use variable-length codes with the shorter codes assigned to symbols or groups of symbols that appear in the data frequently. Fibonacci code, as a representative of these codes, is often utilized for the compression of small numbers. Time consumption of encoding as well as decoding algorithms is important for some applications in the data processing area. In this case, efficiency of these algorithms is extremely important. There are some works related to the fast decoding of variable-length codes. In this paper, we introduce the Fast Fibonacci encoding algorithm; our approach is up-to 4.6× more efficient than the conventional bit-oriented algorithm.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>Introduction
? Work is partially supported by Grants of GACR No. P202/10/0573 and SGS, VSˇB–</p>
      <p>Technical University of Ostrava, No. SP/2010138.</p>
      <p>
        The time consumption of decompression is more critical than the time of
compression; therefore, efficient decompression algorithms were studied in many
works for the decompression of data structures [
        <xref ref-type="bibr" rid="ref15 ref16 ref6">15, 6, 16</xref>
        ] or text files [
        <xref ref-type="bibr" rid="ref12 ref3">12, 3</xref>
        ]. In
the case of physical implementation of database systems, retrieval of compressed
data structure’s pages may be more efficient than retrieval of uncompressed
pages due to the fact that the cost of decompression is lower than the cost of
page accessing in the secondary storage [
        <xref ref-type="bibr" rid="ref16 ref2">16, 2</xref>
        ].
      </p>
      <p>
        Since fast decoding algorithms have not yet been known, variable-length
codes have not been used to compression of data structures, and, in generally,
in the data processing area. The first effort of the fast decoding algorithm for
Fibonacci codes of order ≥ 2 has been proposed in [
        <xref ref-type="bibr" rid="ref7 ref8">7, 8</xref>
        ]. We studied fast decoding
algorithms of various variable-length codes in our previous work [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ]. The fast
encoding algorithms for the Fibonacci code yet not has been studied. In the
case of data structures, pages are decompressed during every reading from the
secondary storage into the main memory or items of a page are decompressed
during every access to the page. If insert or update operations are considered,
data compression becomes more significant.
      </p>
      <p>In this article, we present Fast encoding algorithm of the Fibonacci of order
2 code. In Section 2, we describe the conventional Fibonacci of order 2
encoding algorithm. In Section 3, we provide a theoretical background of the fast
encoding algorithm based on Fibonacci right shift and Encoding-Interval table.
In Section 4, experimental results are presented and the proposed algorithm is
compared to the conventional approach. In the last section, we conclude this
paper and outline future works.
2</p>
      <p>
        Fibonacci Coding
In this section, the theoretical background of Fibonacci of order 2 is briefly
described. This universal code introduced by Apostolico and Fraenkel in [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] is
based on the Fibonacci numbers [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]. The sequence of Fibonacci numbers is
defined as follows:
      </p>
      <p>Fi = Fi−1 + Fi−2 , for i ≥ 1,</p>
      <p>where F−1 = F0 = 1.</p>
      <p>Definition 1. (Fibonacci binary encoding and computation of its value)</p>
      <p>Let F (n) = a0a1a2 . . . ap be the Fibonacci binary encoding of a positive
integer n. The value of the Fibonacci binary encoding, denoted V (F (n)), is defined
as follows:</p>
      <p>V (F (n)) = n =</p>
      <p>p
X aiFi (ai ∈ {0, 1}, 0 ≤ i ≤ p)
i=0</p>
      <p>
        In the Fibonacci binary encoding, each bit represents a Fibonacci number Fi.
Such a number has the property of not containing any sequence of two
consecutive 1-bits [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. This property is utilized for the construction of the Fibonacci
code F (n) of number n. Fibonacci code F (n) maps n onto a binary string so
that the string ends with a sequence of two consecutive 1-bits. The Fibonacci
codes for some integers are shown in Table 1.
      </p>
      <p>In Algorithm 1, we see how the conventional bit-oriented algorithm encodes
a positive integer n into a Fibonacci code. This algorithm outputs the encoded
number into F n and its length into LF n. Due to the fact that bits of Fibonacci
coding are encoded in the reverse order we must use the temporary Fn variable.
Bits in the variable are right-shifted in each inner loop.
3</p>
      <p>
        Fast Fibonacci Encoding Algorithm
The main issue of the conventional encoding algorithm is handling encoded
numbers in the bit-by-bit manner. To design a fast encoding algorithm, encoded
numbers are separated into segments larger than one bit. Similar principles have
been utilized in fast decoding algorithms [
        <xref ref-type="bibr" rid="ref17 ref8 ref9">17, 8, 9</xref>
        ]. The separation of encoded
numbers utilizes the Fibonacci right shift operation introduced in [
        <xref ref-type="bibr" rid="ref17 ref9">17, 9</xref>
        ].
Individual segments are then encoded by the precomputed Encoding-Interval table.
When all individual segments are encoded, they are put together into the
complete code. The Fibonacci right shift and Encoding-Interval table are presented
in Section 3.1. The fast algorithm is explained in Section 3.2.
3.1
      </p>
      <p>
        Fibonacci Shift Operation and Encoding-Interval Table
The Fibonacci shift operation introduced in [
        <xref ref-type="bibr" rid="ref17 ref9">17, 9</xref>
        ] is required for the bit
manipulation in fast encoding and decoding algorithms. In this paper, we introduce
an efficient computation of this operation.
input : n, a positive integer
output: Fn, encoded number by Fibonacci code of order 2 with LFn length
1 p ← 0 ;
2 while Fp ≤ n do p ←p +1;
3 p ← p − 1;
4 Fn ← 1;
5 LFn ← 1;
6 while p ≥ 0 do
7 Fn ← Fn &lt;&lt; 1;
8 if Fp ≤ n then
9 Fn ← Fn | 1;
10 n ← n − Fp;
11 end
12 LFn ←LFn +1;
13 p ← p − 1;
14 end
Algorithm 1: Conventional encoding algorithm for the Fibonacci code of
order 2
      </p>
    </sec>
    <sec id="sec-2">
      <title>Definition 2. Fibonacci shift operation</title>
      <p>Let F (n) = a0a1a2 . . . ap be a Fibonacci binary encoding, k be an integer,
k ≥ 0. The k-th Fibonacci left shift F (n) &lt;&lt;F k is defined as follows:
k</p>
      <p>F (n) &lt;&lt;F k = z00}.|. . 0{ a0a1a2 . . . ap</p>
    </sec>
    <sec id="sec-3">
      <title>Fibonacci right shift is defined as is follows:</title>
      <p>F (n) &gt;&gt;F k = akak+1ak+2 . . . ap</p>
      <p>We utilize k-Fibonacci right shifts for the separation of numbers into
segments. We do not need all k-Fibonacci right shifts, we only need multiplies of
the segment size S. If we consider 32 bit-length integers than the length of the
largest code is L(F (232)) = 46; therefore, k ∈ {0, 8, 16, 24, 32, 40} for S = 8 and
k ∈ {0, 16, 32} for S = 16.</p>
      <p>The conventional approach to the calculation of Fibonacci right shift works
in the following steps:
1. Compute F (n) for the n value according to Definition 1.
2. Binary-shift the bits of F (n) by k: F (n) &gt;&gt; k.
3. Compute the value of the shifted number F (n) &gt;&gt; k according to
Definition 1.</p>
      <p>The Fibonacci right shift operation is time consuming since the Fibonacci
value computation in Steps 1 and 3 requires a summarization of Fibonacci
numbers for 1-bits; therefore, we utilize the Encoding-Interval table for the fast
computation.</p>
      <p>The Encoding-Interval table allows separating of numbers into segments with
the k-th Fibonacci right shift and then direct translation of segments into
Fibonacci codes. The size of the Encoding-Interval table depends on the size of
the segment S. The segment size is usually one byte, i.e. S = 8. When we use
larger segments the length of the Encoding-Interval table grows; on the other
hand, the encoding becomes faster. There are FS − 1 codes which can fit into one
segment; it means F8 − 1 = 54 codes which can fit into the 8 bit-length segment
and F16 − 1 = 2, 583 codes for the 16 bit-length segment.</p>
      <p>Therefore, the total size of the Encoding-Interval table is:
l 2b m
table length = (FS − 1) × S
where b is the number of bits of the largest code.</p>
      <p>Each line of the Encoding-Interval table is then built for all F (n) codes which
can fit into one segment and for all k-th Fibonacci right shifts. Each line includes
the following values (see Table 3 for some examples):
– F (n) – the Fibonacci code stored in the segment.
– L(F (n)) – the bit-length of the Fibonacci code
– k – the parameter k of the Fibonacci right shift operation
– n – the value stored in the actual segment n = V (F (n))
– hnmin, nmaxi – an interval of numbers before the shift operation; this number
is formally defined as follows: ∀x ∈ hnmin, nmaxi : V (F (x) &gt;&gt; F k) = n.</p>
      <p>This table can be used for the computation of the k-th Fibonacci right shift.
For each x value we need to pass through the table to find the correct line
where x ∈ hnmin, nmaxi. In this line we can directly read the shifted value
V (F (x)) &gt;&gt;F k = n and also the corresponding Fibonacci code F (n).
Obviously, we need to pass only lines with correct k-th Fibonacci right shift.</p>
      <p>To be able to compute a shifted value as fast as possible, we must consider
the properties of the Fibonacci code. Let Fi denote the i-th term of the Fibonacci
sequence then we can express each Fibonacci number by</p>
      <p>
        Fi = bφi
where φ is the well-known golden ratio [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] and a is the coefficient of the
domi√
nating term [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. In the case of Fibonacci of order 2 the value φ = 1+2 5 ≈ 1.6180
and b = 3√5+5 [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. The Fibonacci sequence calculated according to this formula
10
is shown in Table 2.
      </p>
      <p>The maximum error of the estimation is 1; by experiments we found, when
the estimation misses, it is overestimated; therefore, the correct value is less
by 1. To check if the estimation is correct we compare the estimation with a
range in the Encoding-Interval table. If the check fails, we simply subtract the 1
value and receive the correct right shift value. In other words, this estimation
decreases the linear complexity of the table scan to at most two attempts.
Example 1. First, let us consider V (F (n)) = n = 265; F (n) = 001010100001.
We calculate the estimation of the 8-th Fibonacci right shift as follows:
V (F (265) &gt;&gt;F 8) ≈
Table 3 shows some lines of the Encoding-Interval table for the 8-th Fibonacci
right shift. After checking the 5-th line of the table we see that the value lies in
the interval &lt; 233; 287 &gt;; therefore, V (0001) = 5 is the correct value of the 8-th
Fibonacci right shift.</p>
      <p>Second, let us consider V (F (n)) = n = 280; F (n) = 000001010001. We
calculate the estimation:</p>
      <p>V (F (280) &gt;&gt;F k) ≈</p>
      <p>After checking the interval in the 6-th line of the Encoding-Interval table we
see that the value not lies in the interval &lt; 288; 321 &gt;; therefore, the estimation
is not correct and the correct value is less by 1. The correct value of the 8-th
Fibonacci right shift of 280 is V (0001) = 5.
The fast encoding algorithm is shown in Algorithm 2. This algorithm utilizes the
previously proposed Encoding-Interval table denoted by EIT . Due to the fact
that the bits of the Fibonacci code are stored in the reverse order we need to write
the bits of segments in the reverse order as well. Encoded segments or their parts
are stored in a specific position of the result F n by the SetV alueOf Segment
function.</p>
      <p>In Algorithm 2, n is encoded by Fibonacci coding; the result is stored in
the F n, the length is stored in the LF n. Short numbers with the code lower
than F8 are directly encoded by the Encoding-Interval table (see Lines 3–5).
For larger numbers we first need to find the maximal k of the Fibonacci right
shift (see Line 7). After the number is separated with k-Fibonacci right shift, it
is encoded by the Encoding-Interval table and stored into the highest segment
with position k/8 (see Lines 8–10). In Line 11, we subtract the minimal range
of the encoded segment from the n. In Lines 12–20, all other segments except
the lower one are separated by Fibonacci right shifts and they are encoded by
the Encoding-Interval table. The length of the encoded number is increased by
the segment size in Line 19. The lowest segment is encoded in Line 21. Finally,
in Lines 23–24, the delimiter is put at the end of the encoded number.
input : n, a positive integer
output: Fn, number encoded by Fibonacci code of order 2 with the LFn
length
while n &lt; Fk+8 do k ← k +8;
n ← n &gt;&gt;F k;
LFn ← 8+ EIT[k ].LFn;
SetValueOfSegment(Fn,k/8,EIT[k ][n ].Fn);
n ← n −EIT[k ][n ].Nmin;
while k &gt; 8 do
k ← k −8;
if n ≥Fk then
n ← n &gt;&gt;F k;
n ← n − EIT[k ][n ].Nmin;</p>
      <p>SetValueOfSegment(Fn,k/8,EIT[k ][n ].Fn);</p>
      <p>Algorithm 2: Fast encoding algorithm for the Fibonacci code of order 2
Example 2. Encoding of the number 17327 is depicted in Figure 1. The value
of the Fibonacci code stored in all segments is V (F (17327)) = 17327. Encoding
of the highest segment is depicted in Figure 2(a). After the 16-th Fibonacci
right shift of the value F (17327), i.e. F (17327) &gt;&gt;F 16, we obtain the shifted
Fibonacci code F (7). The value after the shift is depicted in Line 3. It represents
the Segment 2 value. We directly access the line 7 of the Encoding-Interval table
by the 16-th Fibonacci right shift and we directly find the code F (7) = 10 with
the length L(F (7)) = 4. The result is in the range h15127; 17710i. The lower
bound of the range is depicted in Line 2. The value of Segments 0 and 1 is
obtained by subtracting the lower bound of the range from the V (F (17327))
number, i.e Segments 0 and 1 stores V (F (17327)) − 15127 = V (F (2200)). This
encoding is carried out in Lines 8–11 of Algorithm 2.</p>
      <p>F(17327)</p>
      <p>F(2200)
LINE 1 1 0 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 . . . .</p>
      <p>Segment 0 Segment 1 Segment 2</p>
      <p>Further encoding is depicted in Figure 2(b). The value of the Fibonacci code
stored in Segments 0 and 1 is V (F (2200)) = 2200. After the 8-th Fibonacci
right shift of the value F (2200), i.e. F (2200) &gt;&gt;F 8, we obtain the shifted
Fibonacci code F (46). The value after the shift is depicted in Line 3. It
represents the separated value from Segment 1. We directly access the line 46 of
the Encoding-Interval table by the 8-th Fibonacci right shift and we directly
find the code F (46) = 149 with the length L(F (46)) = 8. The result is in the
range h2173; 2206i. The lower bound of the range is depicted in Line 2. The
value of Segment 0 is obtained by subtracting the lower bound of the range from
V (F (2200)) number, i.e Segment 0 includes V (F (2200)) − 2173 = V (F (27)).
This encoding is carried out in Lines 12–20 of Algorithm 2.</p>
      <p>The last Segment 0 with the value V (F (27)) is directly encoded into F (27) =
73 with the length L(F (27)) = 7 in Line 21 of Algorithm 2. We access the line
27 of the Encoding-Interval table for any shift to obtain this value, because we
do not need any following subtraction.</p>
      <p>Finally, the 1-bit delimiter is added in position 8+8+L(F (7))+1 = 8+8+4 =
12 of the encoded number (see Lines 23–24 of Algorithm 2).
4</p>
      <p>Experimental Results
The proposed Fast Fibonacci encoding algorithm has been tested and compared
with the conventional algorithm. The algorithms’ performance has been tested
for various test collections. The tests were performed on a PC with dual core
Intel 2.4GHz, 3 GB RAM using Windows 7 32-bit.</p>
      <p>The test collections used in experiments have the same size: 10, 000, 000
numbers. The proposed algorithm is universal and it may be applied for arbitrary
numbers &gt; 0. However, we worked with numbers ≤ 4, 294, 967, 295, it means the
maximal value is the value of the 32 bit-length binary number. Tested collections
are as follows:
– 8-bit – a collection of random numbers ranging from 1 to 255
– 16-bit – a collection of random numbers ranging from 256 to 65,535
– 24-bit – a collection of random numbers ranging from 65,536 to 16,777,215
– 32-bit – a collection of random numbers ranging from 16,777,216 to
4,294,967,295
– ALL - a collection of random numbers ranging from 1 to 4,294,967,295</p>
      <p>We performed tests for segment sizes S = 8 and S = 16. We ran each test 10
times and calculated average values. Results of all tests are depicted in Table 4
and Figure 2. The Fast Fibonacci encoding algorithm is approximately 2.6×
faster than the conventional approach for the segment size S = 8 and 4.6×
faster for the segment size S = 16. The encoding times linearly increase with the
bit-length of encoded numbers but the speedup ratio is not influenced by this
increasing.</p>
      <p>
        Encoding Times
Speedup Ratio
5,000
4,000
] 3,000
s
[m2,000
1,000
0
In this paper, the fast encoding algorithm for the Fibonacci code of order 2
is introduced. We introduced the effective implementation of Fibonacci right
shift which is utilized by the encoding algorithm for separating integers into
segments. The segments are directly translated into the Fibonacci code by the
Encoding-Interval table. The improvement depends on the segment size used for
the separation of the encoded numbers. For the segment size S = 8 (it means
one byte), the Fast Fibonacci encoding is up-to 2.6× more efficient than the
conventional algorithm. For the larger segment of two bytes in size (it means S =
16), the proposed algorithm is up-to 4.6× more efficient than the conventional
algorithm. In our future work, we want to develop fast encoding algorithms for
other universal codes like Elias-delta [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ], Fibonacci code of order 3 [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], and so
on.
      </p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>A.</given-names>
            <surname>Apostolico</surname>
          </string-name>
          and
          <string-name>
            <given-names>A.</given-names>
            <surname>Fraenkel</surname>
          </string-name>
          .
          <article-title>Robust Transmission of Unbounded Strings Using Fibonacci Representations</article-title>
          .
          <source>IEEE Transactions on Information Theory</source>
          ,
          <volume>33</volume>
          (
          <issue>2</issue>
          ):
          <fpage>238</fpage>
          -
          <lpage>245</lpage>
          ,
          <year>1987</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>R. Baˇca</surname>
            , J. Walder,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Pawlas</surname>
            , and
            <given-names>M.</given-names>
          </string-name>
          <article-title>Kra´tky´. Benchmarking the Compression of XML Node Streams</article-title>
          .
          <source>In Proceedings of the BenchmarX 2010 International Workshop</source>
          , DASFAA, Accepted. Springer-Verlag,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <given-names>T. C.</given-names>
            <surname>Bell</surname>
          </string-name>
          and
          <string-name>
            <given-names>I. H.</given-names>
            <surname>Witten</surname>
          </string-name>
          . Text Compression. Prentice Hall,
          <year>1990</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>R. A.</given-names>
            <surname>Dunlap</surname>
          </string-name>
          .
          <source>The Golden Ratio and Fibonacci Numbers. World Scientific Publishing Co. Pte. Ltd.</source>
          ,
          <year>1997</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>P.</given-names>
            <surname>Elias</surname>
          </string-name>
          .
          <article-title>Universal Codeword Sets and Representations of the Integers</article-title>
          .
          <source>IEEE Transactions on Information Theory</source>
          , IT-
          <volume>21</volume>
          (
          <issue>2</issue>
          ):
          <fpage>194</fpage>
          -
          <lpage>203</lpage>
          ,
          <year>1975</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>J.</given-names>
            <surname>Goldstein</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Ramakrishnan</surname>
          </string-name>
          , and
          <string-name>
            <given-names>U.</given-names>
            <surname>Shaft</surname>
          </string-name>
          .
          <article-title>Compressing Relations and Indexes</article-title>
          .
          <source>In Proceedings of the 14th International Conference on Data Engineering, ICDE</source>
          <year>1998</year>
          , page 370, Los Alamitos, CA, USA,
          <year>1998</year>
          . IEEE Computer Society.
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>S. T.</given-names>
            <surname>Klein</surname>
          </string-name>
          .
          <article-title>Fast Decoding of Fibonacci Encoded Texts</article-title>
          .
          <source>In Proceedings of the International Data Compression Conference, DCC'07, page 388</source>
          , Washington, DC, USA,
          <year>2007</year>
          . IEEE Computer Society.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <given-names>S. T.</given-names>
            <surname>Klein and M. K. Ben-Nissan</surname>
          </string-name>
          .
          <article-title>Using Fibonacci Compression Codes as Alternatives to Dense Codes</article-title>
          .
          <source>In Proceedings of the International Data Compression Conference, DCC'08</source>
          , pages
          <fpage>472</fpage>
          -
          <lpage>481</lpage>
          , Washington, DC, USA,
          <year>2008</year>
          . IEEE Computer Society.
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <given-names>S. T.</given-names>
            <surname>Klein and M. K. Ben-Nissan</surname>
          </string-name>
          .
          <article-title>On the Usefulness of Fibonacci Compression Codes</article-title>
          . Accepted in
          <source>Computer Journal</source>
          ,
          <year>2009</year>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <article-title>Leonardo of Pisa (known as Fibonacci)</article-title>
          .
          <source>Liber Abaci</source>
          .
          <volume>1202</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <given-names>M.</given-names>
            <surname>Livio</surname>
          </string-name>
          .
          <article-title>The Golden Ratio: The Story of Phi, the World's Most Astonishing Number</article-title>
          . Broadway,
          <year>January 2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <given-names>H.</given-names>
            <surname>Plantinga</surname>
          </string-name>
          .
          <article-title>An Asymmetric, Semi-adaptive Text Compression Algorithm</article-title>
          .
          <source>In Proceedings of the International Data Compression Conference</source>
          ,
          <string-name>
            <surname>DCC</surname>
          </string-name>
          <year>1994</year>
          . IEEE Computer Society,
          <year>1994</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <given-names>D.</given-names>
            <surname>Salomon</surname>
          </string-name>
          .
          <source>Data Compression The Complete Reference. Third Edition</source>
          , SpringerVerlag, New York,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <given-names>D.</given-names>
            <surname>Salomon</surname>
          </string-name>
          .
          <article-title>Variable-length Codes for Data Compression</article-title>
          . Springer-Verlag,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <given-names>H.</given-names>
            <surname>Samet</surname>
          </string-name>
          .
          <article-title>Data Structures for Quadtree Approximation and Compression</article-title>
          .
          <source>Communications of the ACM archive</source>
          ,
          <volume>28</volume>
          (
          <issue>9</issue>
          ):
          <fpage>973</fpage>
          -
          <lpage>993</lpage>
          ,
          <year>September 1985</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>J. Walder</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <article-title>Kra´tky´, and</article-title>
          <string-name>
            <given-names>R.</given-names>
            <surname>Baˇca</surname>
          </string-name>
          .
          <article-title>Benchmarking Coding Algorithms for the R-tree Compression</article-title>
          .
          <source>In Proceedings of the Dateso 2009 Annual International Workshop on Databases, Texts, Specifications and Objects</source>
          , pages
          <fpage>32</fpage>
          -
          <lpage>43</lpage>
          . CEUR Workshop Proceedings, Volume:
          <volume>471</volume>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>J. Walder</surname>
          </string-name>
          , M. Kr´atky´, R. Baˇca, J. Platoˇs, and V. Sna´ˇsel.
          <article-title>Fast Decoding Algorithms for Variable-Lengths Codes</article-title>
          . Submitted in Information Science, January,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <given-names>I. H.</given-names>
            <surname>Witten</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Moffat</surname>
          </string-name>
          , and
          <string-name>
            <given-names>T. C.</given-names>
            <surname>Bell</surname>
          </string-name>
          . Managing Gigabytes,
          <article-title>Compressing and Indexing Documents and Images, 2nd edition</article-title>
          . Morgan Kaufmann,
          <year>1999</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>