WikiMili The Free Encyclopedia

The **Wavelet Tree** is a succinct data structure to store strings in compressed space. It generalizes the and operations defined on bitvectors to arbitrary alphabets.

In computer science, a **succinct data structure** is a data structure which uses an amount of space that is "close" to the information-theoretic lower bound, but still allows for efficient query operations. The concept was originally introduced by Jacobson to encode bit vectors, (unlabeled) trees, and planar graphs. Unlike general lossless data compression algorithms, succinct data structures retain the ability to use them in-place, without decompressing them first. A related notion is that of a compressed data structure, in which the size of the data structure depends upon the particular data being represented.

Originally introduced to represent compressed suffix arrays,^{ [1] } it has found application in several contexts.^{ [2] }^{ [3] } The tree is defined by recursively partitioning the alphabet into pairs of subsets; the leaves correspond to individual symbols of the alphabet, and at each node a bitvector stores whether a symbol of the string belongs to one subset or the other.

In computer science, a **compressed suffix array** is a compressed data structure for pattern matching. Compressed suffix arrays are a general class of data structure that improve on the suffix array. These data structures enable quick search for an arbitrary string with a comparatively small index.

The name derives from an analogy with the wavelet transform for signals, which recursively decomposes a signal into low-frequency and high-frequency components.

In mathematics, a **wavelet series** is a representation of a square-integrable function by a certain orthonormal series generated by a wavelet. This article provides a formal, mathematical definition of an **orthonormal wavelet** and of the **integral wavelet transform**.

Let be a finite alphabet with . By using succinct dictionaries in the nodes, a string can be stored in , where is the order-0 empirical entropy of .

**Information entropy** is the average rate at which information is produced by a stochastic source of data.

If the tree is balanced, the operations , , and can be supported in time.

A wavelet tree contains a bitmap representation of a string. If we know the alphabet set, then the exact string can be inferred by tracking bits down the tree. To find the letter at i^{th} position in the string :-

If the i^{th} element at root is 0, we move to the left child, else we move to the right child. Now our index in the child node is the rank of the respective bit in the parent node. This rank can be calculated in O(1) by using succinct dictionaries. Along with moving to a child we also refine our alphabet to the respective subset. These steps are repeated till we reach a leaf, where we are left only with one letter in our alphabet, which is the one we were looking for. Thus for a balanced tree, any S[i] in string S can be accessed in ^{ [3] } time.

Several extensions to the basic structure have been presented in the literature. To reduce the height of the tree, multiary nodes can be used instead of binary.^{ [2] } The data structure can be made dynamic, supporting insertions and deletions at arbitrary points of the string; this feature enables the implementation of dynamic FM-indexes.^{ [4] } This can be further generalized, allowing the update operations to change the underlying alphabet: the Wavelet Trie^{ [5] } exploits the trie structure on an alphabet of strings to enable dynamic tree modifications.

In computer science, an **FM-index** is a compressed full-text substring index based on the Burrows-Wheeler transform, with some similarities to the suffix array. It was created by Paolo Ferragina and Giovanni Manzini, who describe it as an opportunistic data structure as it allows compression of the input text while still permitting fast substring queries. The name stands for Full-text index in Minute space.

In computer science, a **trie**, also called **digital tree**, **radix tree** or **prefix tree**, is a kind of search tree—an ordered tree data structure used to store a dynamic set or associative array where the keys are usually strings. Unlike a binary search tree, no node in the tree stores the key associated with that node; instead, its position in the tree defines the key with which it is associated. All the descendants of a node have a common prefix of the string associated with that node, and the root is associated with the empty string. Keys tend to be associated with leaves, though some inner nodes may correspond to keys of interest. Hence, keys are not necessarily associated with every node. For the space-optimized presentation of prefix tree, see compact prefix tree.

- Wavelet Trees. A blog post describing the construction of a wavelet tree, with examples.

In automata theory, a finite state machine is called a deterministic finite automaton (DFA), if

In computer science, a **suffix tree** is a compressed trie containing all the suffixes of the given text as their keys and positions in the text as their values. Suffix trees allow particularly fast implementations of many important string operations.

A **finite-state transducer** (**FST**) is a finite-state machine with two memory *tapes*, following the terminology for Turing machines: an input tape and an output tape. This contrasts with an ordinary finite-state automaton, which has a single tape. An FST is a type of finite-state automaton that maps between two sets of symbols. An FST is more general than a finite-state automaton (FSA). An FSA defines a formal language by defining a set of accepted strings while an FST defines relations between sets of strings.

In coding theory, **block codes** are a large and important family of error-correcting codes that encode data in blocks. There is a vast number of examples for block codes, many of which have a wide range of practical applications. The abstract definition of block codes is conceptually useful because it allows coding theorists, mathematicians, and computer scientists to study the limitations of *all* block codes in a unified way. Such limitations often take the form of *bounds* that relate different parameters of the block code to each other, such as its rate and its ability to detect and correct errors.

In computer science, a **suffix array** is a sorted array of all suffixes of a string. It is a data structure used, among others, in full text indices, data compression algorithms and within the field of bibliometrics.

In computer science, the **longest common substring problem** is to find the longest string that is a substring of two or more strings.

The **finite element method** (FEM) is a powerful technique originally developed for numerical solution of complex problems in structural mechanics, and it remains the method of choice for complex systems. In the FEM, the structural system is modeled by a set of appropriate **finite elements** interconnected at discrete points called nodes. Elements may have physical properties such as thickness, coefficient of thermal expansion, density, Young's modulus, shear modulus and Poisson's ratio.

In formal language theory, a string is defined as a finite sequence of members of an underlying base set; this set is called the **alphabet** of a string or collection of strings. The members of the set are called *symbols*, and are typically thought of as representing letters, characters, or digits. For example, a common alphabet is {0,1}, the **binary alphabet**, and a binary string is a string drawn from the alphabet {0,1}. An infinite sequence of letters may be constructed from elements of an alphabet as well.

In mathematical logic, the **Borel hierarchy** is a stratification of the Borel algebra generated by the open subsets of a Polish space; elements of this algebra are called **Borel sets**. Each Borel set is assigned a unique countable ordinal number called the **rank** of the Borel set. The Borel hierarchy is of particular interest in descriptive set theory.

In mathematics and computer science, a **history monoid** is a way of representing the histories of concurrently running computer processes as a collection of strings, each string representing the individual history of a process. The history monoid provides a set of synchronization primitives for providing rendezvous points between a set of independently executing processes or threads.

A **queue machine** or **queue automaton** is a finite state machine with the ability to store and retrieve data from an infinite-memory queue. It is a model of computation equivalent to a Turing machine, and therefore it can process the same class of formal languages.

An **embedded pushdown automaton** or **EPDA** is a computational model for parsing languages generated by tree-adjoining grammars (TAGs). It is similar to the context-free grammar-parsing pushdown automaton, except that instead of using a plain stack to store symbols, it has a stack of iterated stacks that store symbols, giving TAGs a generative capacity between context-free grammars and context-sensitive grammars, or a subset of the mildly context-sensitive grammars. Embedded pushdown automata should not be confused with nested stack automata which have more computational power.

In the field of computational linguistics, a **morphological dictionary** is a linguistic resource that contains correspondences between surface form and lexical forms of words. Surface forms of words are those found in any text. The corresponding lexical form of a surface form is the lemma followed by grammatical information. In English *give*, *gives*, *giving*, *gave* and *given* are surface forms of the verb *give*. The lexical form would be "give", verb. There are two kinds of morphological dictionaries: aligned and non-aligned.

A **schema** is a template in computer science used in the field of genetic algorithms that identifies a subset of strings with similarities at certain string positions. Schemata are a special case of cylinder sets; and so form a topological space.

In formal language theory, a **grammar** is a set of production rules for strings in a formal language. The rules describe how to form strings from the language's alphabet that are valid according to the language's syntax. A grammar does not describe the meaning of the strings or what can be done with them in whatever context—only their form.

In computer science, more specifically in automata and formal language theory, **nested words** are a concept proposed by Alur and Madhusudan as a joint generalization of words, as traditionally used for modelling linearly ordered structures, and of ordered unranked trees, as traditionally used for modelling hierarchical structures. Finite-state acceptors for nested words, so-called **nested word automata**, then give a more expressive generalization of finite automata on words. The linear encodings of languages accepted by finite nested word automata gives the class of **visibly pushdown languages**. The latter language class lies properly between the regular languages and the deterministic context-free languages. Since their introduction in 2004, these concepts have triggered much research in that area.

In computer science and mathematical logic, an **infinite-tree automaton** is a state machine that deals with infinite tree structures. It can be seen as an extension of top-down finite-tree automata to infinite trees or as an extension of infinite-word automata to infinite trees.

- ↑ R. Grossi, A. Gupta, and J. S. Vitter, High-order entropy-compressed text indexes,
*Proceedings of the 14th Annual SIAM/ACM Symposium on Discrete Algorithms (SODA)*, January 2003, 841-850. - 1 2 P. Ferragina, R. Giancarlo, G. Manzini, The myriad virtues of Wavelet Trees,
*Information and Computation*, Volume 207, Issue 8, August 2009, Pages 849-866 - ↑ H.-L. Chan, W.-K. Hon, T.-W. Lam, and K. Sadakane, Compressed Indexes for dynamic text collections,
*ACM Transactions on Algorithms*, 3(2), 2007 - ↑ R. Grossi and G. Ottaviano, The Wavelet Trie: maintaining an indexed sequence of strings in compressed space,
*In Proceedings of the 31st Symposium on the Principles of Database Systems (PODS)*, 2012

This page is based on this Wikipedia article

Text is available under the CC BY-SA 4.0 license; additional terms may apply.

Images, videos and audio are available under their respective licenses.

Text is available under the CC BY-SA 4.0 license; additional terms may apply.

Images, videos and audio are available under their respective licenses.