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

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

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

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

உதாரணமாக

உரையைக் கவனியுங்கள்: "அல்காரிதம் எவ்வாறு செயல்படுகிறது என்பதைப் பார்க்க, இந்த உரையில் ஒரு துணைச்சரத்தைத் தேடுவோம்."

மற்றும் தேட வேண்டிய சப்ஸ்ட்ரிங்: "substring"

  1. நிலை 0 இல் தொடங்கவும். Let' "சப்ஸ்ட்ரிங்" உடன் ஒப்பிடவும். பொருத்தம் இல்லை.
  2. நிலை 1 க்கு நகர்த்தவும். et's "சப்ஸ்ட்ரிங்" உடன் ஒப்பிடவும். பொருத்தம் இல்லை.
  3. நிலை 2க்கு நகர்த்தவும். t's "துணைச்சரத்துடன்" ஒப்பிடவும். பொருத்தம் இல்லை.
  4. நிலைக்கு நகர்த்து 3. 's s "சப்ஸ்ட்ரிங்" உடன் ஒப்பிடுக. பொருத்தம் இல்லை.
  5. நிலைக்கு நகர்த்து 4. se "சப்ஸ்ட்ரிங்" உடன் ஒப்பிடுக. பொருத்தம் இல்லை.
  6. நிலைக்கு நகர்த்து 5. sea "சப்ஸ்ட்ரிங்" உடன் ஒப்பிடுக. பொருத்தம் இல்லை.
  7. நிலை 6 க்கு நகர்த்தவும். earc "சப்ஸ்ட்ரிங்" உடன் ஒப்பிடுக. பொருத்தம் இல்லை.
  8. நிலை 7 க்கு நகர்த்தவும். arch "சப்ஸ்ட்ரிங்" உடன் ஒப்பிடவும். பொருத்தம் இல்லை.
  9. நிலை 8 க்கு நகர்த்தவும். rch "சப்ஸ்ட்ரிங்" உடன் " ஒப்பிடவும். பொருத்தம் இல்லை.
  10. 9 நிலைக்கு நகர்த்தவும். ch w "சப்ஸ்ட்ரிங்" உடன் ஒப்பிடவும். பொருத்தம் இல்லை.
  11. 10 ஆம் நிலைக்கு நகர்த்தவும். h wi "சப்ஸ்ட்ரிங்" உடன் ஒப்பிடவும். பொருத்தம் இல்லை.
  12. நிலை 11க்கு நகர்த்தவும். wit "சப்ஸ்ட்ரிங்" உடன் "ஐ ஒப்பிடவும். பொருத்தம் இல்லை.
  13. 12 ஆம் நிலைக்கு நகர்த்தவும். with "சப்ஸ்ட்ரிங்" உடன் ஒப்பிடவும். பொருத்தம் இல்லை.
  14. 13 ஆம் நிலைக்கு நகர்த்தவும். ithi "சப்ஸ்ட்ரிங்" உடன் ஒப்பிடவும். பொருத்தம் இல்லை.
  15. 14 ஆம் நிலைக்கு நகர்த்தவும். thin "சப்ஸ்ட்ரிங்" உடன் ஒப்பிடவும். பொருத்தம் இல்லை.
  16. 15 ஆம் நிலைக்கு நகர்த்தவும். hinn "சப்ஸ்ட்ரிங்" உடன் ஒப்பிடவும். பொருத்தம் இல்லை.
  17. 16 ஆம் நிலைக்கு நகர்த்தவும். in t "சப்ஸ்ட்ரிங்" உடன் ஒப்பிடவும். பொருத்தம் இல்லை.
  18. 17 ஆம் நிலைக்கு நகர்த்தவும். n th "சப்ஸ்ட்ரிங்" உடன் ஒப்பிடவும். பொருத்தம் இல்லை.
  19. நிலை 18 க்கு நகர்த்தவும். thi "சப்ஸ்ட்ரிங்" உடன் " ஒப்பிடவும். பொருத்தம் இல்லை.
  20. 19 ஆம் நிலைக்கு நகர்த்தவும். this "சப்ஸ்ட்ரிங்" உடன் ஒப்பிடவும். பொருத்தம் இல்லை.
  21. நிலை 20க்கு நகர்த்தவும். his "சப்ஸ்ட்ரிங்" உடன் "ஐ ஒப்பிடவும். பொருத்தம் இல்லை.
  22. 21 ஆம் நிலைக்கு நகர்த்தவும். is t "சப்ஸ்ட்ரிங்" உடன் ஒப்பிடவும். பொருத்தம் இல்லை.
  23. 22 ஆம் நிலைக்கு நகர்த்தவும். s te  "சப்ஸ்ட்ரிங்" உடன் ஒப்பிடவும். பொருத்தம் இல்லை.
  24. 23 ஆம் நிலைக்கு நகர்த்தவும். ubst  "சப்ஸ்ட்ரிங்" உடன் ஒப்பிடவும். பொருத்தம் இல்லை.
  25. 24 ஆம் நிலைக்கு நகர்த்தவும். bstr "சப்ஸ்ட்ரிங்" உடன் ஒப்பிடவும். பொருத்தம் இல்லை.
  26. 25 ஆம் நிலைக்கு நகர்த்தவும். stre "சப்ஸ்ட்ரிங்" உடன் ஒப்பிடவும். பொருத்தம் இல்லை.
  27. 26 ஆம் நிலைக்கு நகர்த்தவும். trin  "சப்ஸ்ட்ரிங்" உடன் ஒப்பிடவும். பொருத்தம் இல்லை.
  28. 27 ஆம் நிலைக்கு நகர்த்தவும். ring  "சப்ஸ்ட்ரிங்" உடன் ஒப்பிடவும். போட்டி கண்டறியப்பட்டது, சாதனை நிலை 27.

"சப்ஸ்ட்ரிங்" என்ற துணைச்சரம் உரைக்குள் 27வது இடத்தில் உள்ளது.

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

#include <iostream>  
#include <string>  
#include <vector>  
  
std::vector<int> textSearch(const std::string& text, const std::string& query) {  
    std::vector<int> positions;  
  
    for(int i = 0; i <= text.length()- query.length(); ++i) {  
        int j = 0;  
        while(j < query.length() && text[i + j] == query[j]) {  
            ++j;  
        }  
        if(j == query.length()) {  
            positions.push_back(i);  
        }  
    }  
  
    return positions;  
}  
  
int main() {  
    std::string text = "Let's search for a substring within this text to see how the algorithm works.";  
    std::string query = "substring";  
  
    std::vector<int> result = textSearch(text, query);  
  
    std::cout << "Substring found at positions: ";  
    for(int pos: result) {  
        std::cout << pos << ";  
    }  
    std::cout << std::endl;  
  
    return 0;  
}  

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