Approximate String Matching: Theory and Applications (La Recherche Approchée de Motifs : Théorie et Applications)
Authors:
Ibrahim Chegrane
Abstract:
The approximate string matching is a fundamental and recurrent problem that arises in most computer science fields. This problem can be defined as follows:
Let $D=\{x_1,x_2,\ldots x_d\}$ be a set of $d$ words defined on an alphabet $Σ$, let $q$ be a query defined also on $Σ$, and let $k$ be a positive integer. We want to build a data structure on $D$ capable of answering the following query: fin…
▽ More
The approximate string matching is a fundamental and recurrent problem that arises in most computer science fields. This problem can be defined as follows:
Let $D=\{x_1,x_2,\ldots x_d\}$ be a set of $d$ words defined on an alphabet $Σ$, let $q$ be a query defined also on $Σ$, and let $k$ be a positive integer. We want to build a data structure on $D$ capable of answering the following query: find all words in $D$ that are at most different from the query word $q$ with $k$ errors.
In this thesis, we study the approximate string matching methods in dictionaries, texts, and indexes, to propose practical methods that solve this problem efficiently. We explore this problem in three complementary directions:
1) The approximate string matching in the dictionary. We propose two solutions to this problem, the first one uses hash tables for $k \geq 2$, the second uses the Trie and reverse Trie, and it is restricted to (k = 1). The two solutions are adaptable, without loss of performance, to the approximate string matching in a text.
2) The approximate string matching for \textit{autocompletion}, which is, find all suffixes of a given prefix that may contain errors. We give a new solution better in practice than all the previous proposed solutions.
3) The problem of the alignment of biological sequences can be interpreted as an approximate string matching problem. We propose a solution for peers and multiple sequences alignment.
\medskip All the results obtained showed that our algorithms, give the best performance on sets of practical data (benchmark from the real world). All our methods are proposed as libraries, and they are published online.
△ Less
Submitted 30 January, 2017;
originally announced January 2017.
Simple, compact and robust approximate string dictionary
Authors:
Ibrahim Chegrane,
Djamal Belazzougui
Abstract:
This paper is concerned with practical implementations of approximate string dictionaries that allow edit errors. In this problem, we have as input a dictionary $D$ of $d$ strings of total length $n$ over an alphabet of size $σ$. Given a bound $k$ and a pattern $x$ of length $m$, a query has to return all the strings of the dictionary which are at edit distance at most $k$ from $x$, where the edit…
▽ More
This paper is concerned with practical implementations of approximate string dictionaries that allow edit errors. In this problem, we have as input a dictionary $D$ of $d$ strings of total length $n$ over an alphabet of size $σ$. Given a bound $k$ and a pattern $x$ of length $m$, a query has to return all the strings of the dictionary which are at edit distance at most $k$ from $x$, where the edit distance between two strings $x$ and $y$ is defined as the minimum-cost sequence of edit operations that transform $x$ into $y$. The cost of a sequence of operations is defined as the sum of the costs of the operations involved in the sequence. In this paper, we assume that each of these operations has unit cost and consider only three operations: deletion of one character, insertion of one character and substitution of a character by another. We present a practical implementation of the data structure we recently proposed and which works only for one error. We extend the scheme to $2\leq k<m$. Our implementation has many desirable properties: it has a very fast and space-efficient building algorithm. The dictionary data structure is compact and has fast and robust query time. Finally our data structure is simple to implement as it only uses basic techniques from the literature, mainly hashing (linear probing and hash signatures) and succinct data structures (bitvectors supporting rank queries).
△ Less
Submitted 22 August, 2014; v1 submitted 17 December, 2013;
originally announced December 2013.