C++ இல் சரம் தேடல் (String Search) அல்காரிதம்- விளக்கம், எடுத்துக்காட்டு மற்றும் குறியீடு

சரம் தேடல் அல்காரிதம் ஒரு பெரிய உரையில்(சரம்) ஒரு குறிப்பிட்ட வடிவத்தின்(சப்ஸ்ட்ரிங்) நிகழ்வுகளைக் கண்டறியப் பயன்படுகிறது. இந்த அல்காரிதம் உரை செயலாக்கம், தேடல் மற்றும் கையாளுதல் பணிகளில் முக்கிய பங்கு வகிக்கிறது.

எப்படி இது செயல்படுகிறது

  1. தேட ஒரு உரை(சரம்) மற்றும் ஒரு பேட்டர்ன்(சப்ஸ்ட்ரிங்) மூலம் தொடங்கவும்.
  2. ஒரு நேரத்தில் ஒரு எழுத்து மூலம் உரையை மீண்டும் செய்யவும்.
  3. உரையில் உள்ள ஒவ்வொரு எழுத்துக்கும், அதை வடிவத்தின் முதல் எழுத்துடன் ஒப்பிடுக.
  4. பொருத்தம் இருந்தால், அடுத்தடுத்த எழுத்துகளும் வடிவத்துடன் பொருந்துமா எனச் சரிபார்க்கவும்.
  5. முறை முற்றிலும் பொருந்தினால், போட்டியின் தொடக்க நிலையை பதிவு செய்யவும்.
  6. உரையில் உள்ள வடிவத்தைத் தேடுவதைத் தொடரவும்.

உதாரணமாக

ஒரு உரையைக் கவனியுங்கள்: "ababcababcabcabc" மற்றும் ஒரு முறை: "abc"

  1. நிலை 0 இல் தொடங்கவும். வடிவில் உள்ள முதல் எழுத்து "a" உடன் "a" ஐ ஒப்பிடுக.
  2. பொருத்தம் கண்டறியப்பட்டது, அடுத்த எழுத்துகளுக்கு நகர்த்தவும்: "b" உடன் "b", "a" உடன் "c".
  3. தொடரவும்: "b" உடன் "a", "a" உடன் "b" மற்றும் "b" உடன் "c".
  4. 2வது இடத்தில் போட்டி தோல்வியடைந்தது.
  5. நிலை 3 இல் மீண்டும் தொடங்கவும். வடிவில் உள்ள முதல் எழுத்து "a" உடன் "a" ஐ ஒப்பிடுக.
  6. வெற்றிகரமான பொருத்தம்: "a" உடன் "a", "b" உடன் "b" மற்றும் "c" உடன் "c".
  7. பதிவு நிலை 3.

"abc" மாதிரியானது 0, 6 மற்றும் 9 நிலைகளில் காணப்படுகிறது.

C++ இல் எடுத்துக்காட்டு குறியீடு

#include <iostream>  
#include <string>  
#include <vector>  
  
std::vector<int> stringSearch(const std::string& text, const std::string& pattern) {  
    std::vector<int> positions;  
  
    for(int i = 0; i <= text.length()- pattern.length(); ++i) {  
        int j = 0;  
        while(j < pattern.length() && text[i + j] == pattern[j]) {  
            ++j;  
        }  
        if(j == pattern.length()) {  
            positions.push_back(i);  
        }  
    }  
  
    return positions;  
}  
  
int main() {  
    std::string text = "ababcababcabcabc";  
    std::string pattern = "abc";  
  
    std::vector<int> result = stringSearch(text, pattern);  
  
    std::cout << "Pattern found at positions: ";  
    for(int pos: result) {  
        std::cout << pos << ";  
    }  
    std::cout << std::endl;  
  
    return 0;  
}  

இந்த எடுத்துக்காட்டில், stringSearch "ababcababcabcabc" உரையில் "abc" வடிவத்தின் நிகழ்வுகளைக் கண்டறிய செயல்பாடு பயன்படுத்தப்படுகிறது. இதன் விளைவாக போட்டிகளின் தொடக்க நிலைகளைக் கொண்ட ஒரு திசையன் இருக்கும்.