Book contents
- Frontmatter
- Contents
- Miscellaneous Frontmatter
- Notation
- Preface
- Part I Preliminaries
- Part II Fundamentals of Biological Sequence Analysis
- Part III Genome-Scale Index Structures
- Part IV Genome-Scale Algorithms
- 10 Read alignment
- 11 Genome analysis and comparison
- 12 Genome compression
- 13 Fragment assembly
- Part V Applications
- References
- Index
12 - Genome compression
from Part IV - Genome-Scale Algorithms
Published online by Cambridge University Press: 05 May 2015
- Frontmatter
- Contents
- Miscellaneous Frontmatter
- Notation
- Preface
- Part I Preliminaries
- Part II Fundamentals of Biological Sequence Analysis
- Part III Genome-Scale Index Structures
- Part IV Genome-Scale Algorithms
- 10 Read alignment
- 11 Genome analysis and comparison
- 12 Genome compression
- 13 Fragment assembly
- Part V Applications
- References
- Index
Summary
A pragmatic problem arising in the analysis of biological sequences is that collections of genomes and especially read sets consisting of material from many species (see Chapter 16) occupy too much space. We shall now consider how to efficiently compress such collections. Observe that we have already considered in Section 10.7.1 how to support pattern searches on top of such compressed genome collections. Another motivation for genome compression comes from the compression distance measures in Section 11.2.5.
We shall explore the powerful Lempel–Ziv compression scheme, which is especially good for repetitive genome collections, but is also competitive as a general compressor: popular compressors use variants of this scheme.
In the Lempel–Ziv parsing problem we are given a text T = t1t2 … tn and our goal is to obtain a partitioning T = T1T2 … Tp such that, for all i ∈ [1..p], Ti is the longest prefix of which has an occurrence starting somewhere in T1 … Ti−1. Such strings Ti are called phrases of T. Let us denote by Li the starting position of one of those occurrences (an occurrence of Ti in T starting somewhere in T1 … Ti−1). In order to avoid the special case induced by the first occurrences of characters, we assume that the text is prefixed by a virtual string of length at most σ that contains all the characters that will appear in T. Then the string T can be encoded by storing the p pairs of integers (|T1|, L1), (|T2|, L2),…,(|Tp|, Lp). A naive encoding would use 2p log n bits of space. Decoding the string T can easily be done in time O(n), since, for every i, Li points to a previously decoded position of the string, so recovering Ti is done just by copying the |Ti| characters starting from that previous position.
- Type
- Chapter
- Information
- Genome-Scale Algorithm DesignBiological Sequence Analysis in the Era of High-Throughput Sequencing, pp. 262 - 281Publisher: Cambridge University PressPrint publication year: 2015