Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> प्रोग्रामिंग

एनाग्राम पैटर्न सर्च

एनाग्राम मूल रूप से किसी दी गई स्ट्रिंग या पैटर्न के सभी क्रमपरिवर्तन हैं। यह पैटर्न सर्चिंग एल्गोरिदम थोड़ा अलग है। इस मामले में, न केवल सटीक पैटर्न खोजा जाता है, यह टेक्स्ट में दिए गए पैटर्न के सभी संभावित व्यवस्थाओं को खोजता है।

इस समस्या को हल करने के लिए, हम पूरे टेक्स्ट को पैटर्न के समान लंबाई की कई विंडोज़ में विभाजित करेंगे। फिर पैटर्न के प्रत्येक कैरेक्टर की काउंट मिलती है और एक ऐरे में स्टोर की जाती है। प्रत्येक विंडो के लिए, हम काउंट ऐरे ढूंढने का भी प्रयास करते हैं, फिर जांचते हैं कि वे मेल खा रहे हैं या नहीं।

एनाग्राम पैटर्न सर्च एल्गोरिदम की टाइम कॉम्प्लेक्सिटी O(n) है।

इनपुट और आउटपुट

इनपुट: मेन स्ट्रिंग "AABAACBABBCABAABBA"। पैटर्न "AABC"।
आउटपुट: एनाग्राम मिला स्थिति: 2
एनाग्राम मिला स्थिति: 3
एनाग्राम मिला स्थिति: 4
एनाग्राम मिला स्थिति: 10

एल्गोरिदम

anagramSearch(text, pattern)

इनपुट: मेन स्ट्रिंग और पैटर्न
आउटपुट: वे सभी लोकेशन जहां पैटर्न और इसके सभी एनाग्राम मिले।

Begin
    patternFreq ऐरे और stringFreq ऐरे परिभाषित करें
    patLen := pattern की लंबाई
    stringLen := टेक्स्ट की लंबाई
    patternFreq ऐरे की सभी एंट्रीज़ को 0 पर सेट करें
    for all characters present in pattern, do
        फ्रीक्वेंसी बढ़ाएं।
    done
    for i := 0 to i <= stringLen - patLen, do
        stringFreq की सभी एंट्रीज़ को 0 पर सेट करें
        for all characters of each window, do
            फ्रीक्वेंसी बढ़ाएं
        done
        if stringFreq और patternFreq समान हैं, then
            i का मान प्रदर्शित करें, क्योंकि उस लोकेशन पर एनाग्राम मिला
        done
    done
End

उदाहरण

#include <iostream>
#include <cstring>
#define LETTER 26
using namespace std;

bool arrayCompare(int *array1, int *array2, int n) {
    for(int i = 0; i < n; i++) {
        if(array1[i] != array2[i])
            return false; // यदि एक मिसमैच है तो काम रोक दें
    }
    return true; // ऐरे समान हैं
}

void setArray(int *array, int n, int value) {
    for(int i = 0; i < n; i++)
        array[i] = value; // ऐरे में सभी स्थानों के लिए वैल्यू रखें
}

void anagramSearch(string mainString, string patt, int *array, int *index) {
    int strFreq[LETTER], pattFreq[LETTER];
    int patLen = patt.size();
    int stringLen = mainString.size();
    setArray(pattFreq, LETTER, 0); // सभी फ्रीक्वेंसी को 0 से इनिशियलाइज़ करें
    for(int i = 0; i < patLen; i++) {
        int patIndex = patt[i] - 'A'; // A का ASCII घटाएं
        pattFreq[patIndex]++; // फ्रीक्वेंसी बढ़ाएं
    }
    for(int i = 0; i <= (stringLen - patLen); i++) {
        // वह रेंज जहां विंडो मूव करेगी
        setArray(strFreq, LETTER, 0); // मेन स्ट्रिंग के लिए सभी फ्रीक्वेंसी को 0 से इनिशियलाइज़ करें
        for(int j = i; j < (i + patLen); j++) { // प्रत्येक विंडो के लिए फ्रीक्वेंसी अपडेट करें।
            int strIndex = mainString[j] - 'A';
            strFreq[strIndex]++; // फ्रीक्वेंसी बढ़ाएं
        }
        if(arrayCompare(strFreq, pattFreq, LETTER)) { // जब दोनों ऐरे समान हों
            (*index)++;
            array[*index] = i; // एनाग्राम ith पोजीशन पर मिला
        }
    }
}

int main() {
    string mainStrng = "AABAACBABBCABAABBA";
    string pattern = "AABC";
    int matchLocation[mainStrng.size()];
    int index = -1;
    anagramSearch(mainStrng, pattern, matchLocation, &index);
    for(int i = 0; i <= index; i++) {
        cout << "Anagram found at position: " << matchLocation[i] << endl;
    }
}

आउटपुट

Anagram found at position: 2
Anagram found at position: 3
Anagram found at position: 4
Anagram found at position: 10

  1. इष्टतम बाइनरी सर्च ट्री इष्टतम बाइनरी सर्च ट्री

    i, तो c := cost[i, r-1] अन्यथा c := 0 यदि r < j, तो c := c + cost[r+1, j] c := c + i से j तक आवृत्ति का योग यदि c < cost[i, j], तो cost[i, j] := c

  1. डेटा स्ट्रक्चर में इष्टतम बाइनरी सर्च ट्री डेटा स्ट्रक्चर में इष्टतम बाइनरी सर्च ट्री

    पूर्णांक का एक सेट सॉर्टेड क्रम में दिया गया है और दूसरा सरणी freq आवृत्ति गणना के लिए है। हमारा कार्य उन डेटा के साथ एक बाइनरी सर्च ट्री बनाना है ताकि सभी खोजों के लिए न्यूनतम लागत प्राप्त हो सके।सब-प्रॉब्लम्स के समाधान को हल करने और स्टोर करने के लिए एक सहायक सरणी cost[n, n] बनाई जाती है। कॉस्ट मै

  1. पायथन प्रोग्राम: एनाग्राम सबस्ट्रिंग खोज पायथन प्रोग्राम: एनाग्राम सबस्ट्रिंग खोज

    इस लेख में हम दी गई समस्या के समाधान के बारे में जानेंगे। समस्या कथन हमें एक टेक्स्ट और एक पैटर्न दिया गया है, हमें पैटर्न और उसके क्रमपरिवर्तन (या एनाग्राम) की सभी घटनाओं को टेक्स्ट में प्रिंट करना है। उदाहरण # अधिकतम मान MAX = 300 # तुलना def compare(arr1, arr2): for i in range(MAX):