## 1 Introduction  
Given a text \(T=T[0,...,n-1]\) of length \(n\) and a pattern \(P=P[0,...,m-1]\) of length \(m\) over an alphabet, \(\Sigma\), the exact string matching problem is to find all occurrences of pattern \(P\) in the text, \(T\). In general, \(n\geq m\). The exact string matching problem is an important and well-studied subject [1,2]. Three popular exact matching algorithms with linear time complexity are the Knuth-Morris-Pratt (KMP) algorithm [3], the Karp-Rabin (KR) algorithm [4] and the Boyer-Moore (BM) algorithm [5]. Like KMP, the BM algorithm matches the pattern and the text by skipping characters that are not likely to result in exact matching with the pattern. Unlike the other methods, it compares the strings from right to left of the pattern. These algorithms need an \(O(|\Sigma|+m)\) time for preprocessing the pattern, and search in \(O(n)\) or sometimes even sublinearly in practice. The total time will be \(O(|\Sigma|+n+m)\). A different approach to pattern matching based on bitwise operations was introduced by [PERSON] and [PERSON] [6]. Here, the pattern is represented by a binary mask. Bitwise SHIFT and AND operations that are considered as constant time are used to find the patterns. Under this framework, SHIFT and AND correspond to the pattern movement and matching, respectively. The algorithm is effective for small patterns, when the pattern length is less than a computer word (typically 32 or 64 characters), which is usual for the text searching problem. Bitwise parallelism is the basis of some recent improved algorithms for exact pattern matching. See [7, 8] for examples. Since [PERSON] and [PERSON] published their famous BM algorithm in 1977 [5], many variants of the BM algorithm have been proposed [2, 9]. Among these variants, Sunday's quick search [10] is widely used because of its simplicity and efficiency. Algorithms based on character comparisons can be classified into these three categories by the way they scan the text [9]: forward orientation, backward orientation and no specific direction. Forward orientation is comparing the text to the pattern from left to right. The KMP algorithm is in this category. See, also, [PERSON] _et al._[11] and [PERSON] _et al._[12]. Under backward orientation, we compare the text to the pattern from right to left; the BM is in this category. For the third category, some algorithms used both forward and backward comparisons at the same time, for example, quick search by Sunday, and its variants, the Franek-Jennings-Smyth (FJS) algorithm [13] and the Horspool algorithm [14]. See, also, the book by [PERSON] and [PERSON] for other similar algorithms [1]. The other strategy is to determine the preprocessing shift array according to the probability of symbol occurrences in the pattern [1, 9]. The QS algorithm and its variants remain among the fastest practical exact pattern matching algorithms to date [9]. In this paper, we introduce faster quick search (FQS), an improved algorithm based on the QS exact pattern matching algorithm. The FQS algorithm computes a statistically expected shift length, which allows for maximal shifts and a smaller number of comparisons between the pattern and the text. FQS also utilizes the QS algorithm's bad-character shift table (array) in preprocessing the pattern. Compared to the state-of-the-art algorithms of the QS variety, FQS is the fastest algorithm when \(|\Sigma|\leq 128\) and has a competitive running time when \(|\Sigma|>128\). Our FQS algorithm will have important applications in the domain of genome database searching, where the DNA (RNA) sequence databases consists of four symbols \(\{A,\ C,\ G,\ T(/U)\}\) and for protein databases with \(|\Sigma|=20\). In this work, we have focused on the QS variants of the Boyer-Moore string matching algorithm. More general discussions on exact string matching can be found in the textbooks, [2, 12, 15, 16]. Two recent reviews related to the topic are [9, 17]. This paper is organized as follows. First, we introduce the BM algorithm, the QS algorithm and its variants in Section 2.