Open In App

What is Pattern Searching ?

Last Updated : 23 Feb, 2024
Improve
Improve
Like Article
Like
Save
Share
Report

Pattern searching in Data Structures and Algorithms (DSA) is a fundamental concept that involves searching for a specific pattern or sequence of elements within a given data structure. This technique is commonly used in string matching algorithms to find occurrences of a particular pattern within a text or a larger string. By using various algorithms like the Knuth-Morris-Pratt (KMP) algorithm or the Rabin-Karp algorithm, pattern searching plays a crucial role in tasks such as text processing, data retrieval, and computational biology.

Pattern Searching

Pattern Searching Algorithms:

We use certain algorithms to do the search process. The complexity of pattern searching varies from algorithm to algorithm. They are very useful when performing a search in a database. The Pattern Searching algorithm is useful for finding patterns in substrings of larger strings.

Below are some of the majorly used pattern searching algorithms:

1. Naive Pattern Searching:

Naive pattern searching is a simple algorithm used to find all occurrences of a pattern (substring) within a text (string). The algorithm compares the pattern with the text character by character and moves one character at a time if a mismatch occurs.

Time Complexity: O(n*m)

2. Rabin Karp Algorithm:

The Rabin-Karp algorithm is a string-searching algorithm that uses hashing to find patterns within a text efficiently. It was developed by Michael O. Rabin and Richard M. Karp. The key idea behind Rabin-Karp is to use a rolling hash function to quickly check for potential matches between the pattern and substrings of the text.

Time Complexity: O(n + m)

3. KMP Algorithm:

The Knuth-Morris-Pratt (KMP) algorithm is a linear time algorithm for string searching. It is more efficient than the naive pattern searching algorithm, especially for large texts, as it avoids unnecessary character comparisons. The key idea behind KMP is to precompute a partial match table (also known as the failure function or lps – longest proper prefix which is also suffix) that helps determine the maximum length of proper suffixes of prefixes, allowing efficient skipping of unnecessary comparisons.

Time Complexity: O(n + m)

Follow the Article to know more about the Pattern Searching Algorithms

4. Z Algorithm:

The Z algorithm is another linear time string matching algorithm that efficiently finds occurrences of a pattern within a text. It is based on the concept of Z-boxes, which represent the longest substring starting from a given position that is also a prefix of the string. The Z algorithm pre-processes the pattern and text to create a Z-array, which is then used to find the occurrences of the pattern in the text.

Time Complexity: O(n+m)

5. Boyer Moore Algorithm:

The Boyer-Moore algorithm is a powerful and efficient string searching algorithm that is widely used in practice. It is known for its ability to skip larger portions of the text when a mismatch occurs, making it particularly efficient for searching in large texts. The algorithm uses two heuristics: the bad character rule and the good suffix rule.

Time Complexity: O(n*m)

Use Cases of Pattern Searching:

Pattern searching algorithms are essential in various applications where finding occurrences of a particular pattern within a larger text or dataset is necessary. Here are some use cases of pattern searching algorithms:

  • Text Processing and Editing: Search and replace functionality in text editors or word processors often uses pattern searching algorithms to identify and replace specific patterns or strings.
  • Information Retrieval: Search engines use pattern searching algorithms to efficiently find relevant documents or web pages based on user queries.
  • Data Mining: Identifying patterns in large datasets, such as finding sequences of events or behaviours, is a common application. Pattern searching helps extract meaningful information from data.
  • Bioinformatics: DNA and protein sequence analysis involve searching for specific patterns or motifs. Pattern searching algorithms are crucial in bioinformatics for tasks like gene identification and sequence alignment.
  • Image Processing: In image recognition, pattern searching algorithms can be used to identify specific shapes, structures, or textures within an image.
  • Network Security: Intrusion detection systems use pattern searching algorithms to identify patterns indicative of malicious activities or security threats in network traffic.
  • Database Systems: Database queries often involve searching for specific patterns or values within tables. Indexing and pattern matching algorithms optimize these searches for performance.
  • Signal Processing: In signal processing, pattern searching algorithms can be employed to identify specific patterns or trends in signals, aiding in tasks like speech recognition or audio processing.
  • Robotics and Computer Vision: Pattern searching is crucial in robotics for object recognition and navigation. Computer vision systems use these algorithms to identify and track objects in a visual field.

Practice Problem on Pattern Searching Algorithm:

Below are some of the Important Pattern Searching Questions:

Problems

Anagram Substring Search (Or Search for all permutations)

Pattern Searching using a Trie of all Suffixes

Wildcard Pattern Matching

Dynamic Programming | Wildcard Pattern Matching | Linear Time and Constant Space

Longest prefix which is also suffix

Count of number of given string in 2D character array

Find all the patterns of “1(0+)1” in a given string (General Approach)

Maximum length prefix of one string that occurs as subsequence in another

Pattern Searching using C++ library

Search a Word in a 2D Grid of characters

String matching where one string contains wildcard characters

Suffix Tree Application 1 – Substring Check



Previous Article
Next Article

Similar Reads

Pattern Searching using C++ library
Given a text txt[0..n-1] and a pattern pat[0..m-1], write a function that prints all occurrences of pat[] in txt[]. You may assume that n > m.Examples: Input : txt[] = "geeks for geeks" pat[] = "geeks" Output : Pattern found at index 0 Pattern found at index 10 Input : txt[] = "aaaa" pat[] = "aa" Output : Pattern found at index 0 Pattern found a
3 min read
Real time optimized KMP Algorithm for Pattern Searching
In the article, we have already discussed the KMP algorithm for pattern searching. In this article, a real-time optimized KMP algorithm is discussed. From the previous article, it is known that KMP(a.k.a. Knuth-Morris-Pratt) algorithm preprocesses the pattern P and constructs a failure function F(also called as lps[]) to store the length of the lon
7 min read
Rabin-Karp algorithm for Pattern Searching in Matrix
Given matrices txt[][] of dimensions m1 x m2 and pattern pat[][] of dimensions n1 x n2, the task is to check whether a pattern exists in the matrix or not, and if yes then print the top most indices of the pat[][] in txt[][]. It is assumed that m1, m2 ? n1, n2 Examples: Input: txt[][] = {{G, H, I, P} {J, K, L, Q} {R, G, H, I} {S, J, K, L} } pat[][]
15+ min read
KMP Algorithm for Pattern Searching
Given a text txt[0 . . . N-1] and a pattern pat[0 . . . M-1], write a function search(char pat[], char txt[]) that prints all occurrences of pat[] in txt[]. You may assume that N > M. Examples: Input: txt[] = "THIS IS A TEST TEXT", pat[] = "TEST"Output: Pattern found at index 10 Input: txt[] = "AABAACAADAABAABA" pat[] = "AABA"Output: Pattern fou
15+ min read
Rabin-Karp Algorithm for Pattern Searching
Given a text T[0. . .n-1] and a pattern P[0. . .m-1], write a function search(char P[], char T[]) that prints all occurrences of P[] present in T[] using Rabin Karp algorithm. You may assume that n > m. Examples: Input: T[] = "THIS IS A TEST TEXT", P[] = "TEST"Output: Pattern found at index 10 Input: T[] = "AABAACAADAABAABA", P[] = "AABA"Output:
15 min read
Optimized Algorithm for Pattern Searching
Question: We have discussed the Naive String matching algorithm here. Consider a situation where all characters of a pattern are different. Can we modify the original Naive String Matching algorithm so that it works better for these types of patterns? If we can, then what are the changes to the original algorithm? Solution: In the original Naive St
7 min read
Finite Automata algorithm for Pattern Searching
Given a text txt[0..n-1] and a pattern pat[0..m-1], write a function search(char pat[], char txt[]) that prints all occurrences of pat[] in txt[]. You may assume that n > m.Examples: Input: txt[] = "THIS IS A TEST TEXT" pat[] = "TEST" Output: Pattern found at index 10 Input: txt[] = "AABAACAADAABAABA" pat[] = "AABA" Output: Pattern found at inde
13 min read
Pattern Searching | Set 6 (Efficient Construction of Finite Automata)
In the previous post, we discussed the Finite Automata-based pattern searching algorithm. The FA (Finite Automata) construction method discussed in the previous post takes O((m^3)*NO_OF_CHARS) time. FA can be constructed in O(m*NO_OF_CHARS) time. In this post, we will discuss the O(m*NO_OF_CHARS) algorithm for FA construction. The idea is similar t
9 min read
Pattern Searching using a Trie of all Suffixes
Problem Statement: Given a text txt[0..n-1] and a pattern pat[0..m-1], write a function search(char pat[], char txt[]) that prints all occurrences of pat[] in txt[]. You may assume that n > m.As discussed in the previous post, we discussed that there are two ways efficiently solve the above problem.1) Preprocess Pattern: KMP Algorithm, Rabin Kar
13 min read
Z algorithm (Linear time pattern searching Algorithm)
This algorithm finds all occurrences of a pattern in a text in linear time. Let length of text be n and of pattern be m, then total time taken is O(m + n) with linear space complexity. Now we can see that both time and space complexity is same as KMP algorithm but this algorithm is Simpler to understand.In this algorithm, we construct a Z array. Wh
13 min read
Article Tags :
Practice Tags :