• Boyer-Mura algoritmi (C++) include using namespace std; define NO_OF_CHARS 256 void
  • Mustaqil ish mavzu: Marshurutlar va ularning vazifalari Qabullagan: Bajargan: nukus-2024




    Download 254,53 Kb.
    bet5/5
    Sana20.05.2024
    Hajmi254,53 Kb.
    #244908
    1   2   3   4   5
    Bog'liq
    marshrut

    if(flag==0)
    {
    cout<<" Indeksda berilgan satr osti topildi:"<
    }
    }
    /*oldingi ichki satrdan birinchi belgini olib tashlash orqali keyingi ichki satrning xesh qiymatini toping va keyingi satrni oldingi satr oxiriga qo'shing*/
    /*xesh qiymatlarini topish uchun O (1) vaqt kerak bo'ladi*/ if(i
    {
    t=(d*(t-text[i]*h)+text[i+m])%q; if(t<0)
    {
    t=(t+q);
    }
    }
    }
    }
    int main()
    {
    /*oʻzgaruvchilarni kiritish*/ string text;
    cin>>text; string pattern;
    cin>>pattern; rabin_karp(text,pattern,97); return 0;
    }


    Boyer-Mur algoritmi. 1977-yilda Robert Boyer va Jey Mur tomonidan ishlab chiqilgan, matnda oldindan ishlov berish imkoniyati bo'lmagan taqdirda, satrda qismiy satrni topish algoritmlari orasida eng tezkori hisoblanadi.
    Algoritm gʻoyasi quyidagicha:

    • Chapdan o'ngga skanerlash, o'ngdan chapga taqqoslash.

    • To'xtash belgisini topish

      • agar taqqoslanadigan birinchi harf mos kelmasa, shablon eng yaqiniga o'tkaziladi

      • to'xtash belgisi bo'lmasa, shablon uning orqasiga siljiydi

    • Mos keladigan qo'shimchani topish

      • agar 1 yoki undan ortiq belgi mos kelsa, shablon bu qo'shimchaning birinchi mos kelishiga qadar o'ngga siljiydi




    1. q w t e e q e w q r w q w r q r q w r q r

    2. q w t e e q e r q r w q w r q r q w r q r

    3. q w t e e q e w q r w q w r q r q w r q r

    4. q w t e e q e w q r w q w r q r q w r q r



    To'xtatish belgisi jadvali. Qismiy satrdagi elementning oxirgi o'rnini belgilaydi (oxirgi harfdan tashqari). Agar qismiy satrda element bo'lmasa, jadvalga 0 kiritiladi (bittadan raqamlash uchun)
    Misol. Qismiy satr: qwrqr

    Simvol

    q

    w

    r

    e

    t

    Oxirgi pozitsiya

    4

    2

    3

    0

    0



      1. q t e e q r w q w r e e q w r q r


      2. q t e e q r w q w r e e q w r q r



    Suffiks jadvali. Mumkin bo'lgan barcha qo'shimchalar uchun jadvalda qismiy satrni o'zgartirish kerak bo'lgan eng kichik miqdor ko'rsatilgan, u yana qo'shimchaga mos keladi. Agar bunday siljishning iloji bo'lmasa, satrning uzunligi ko'rsatilgan.
    Misol. Qismiy satr: qwrqr

    Suffiks

    Boʻsh

    r

    qr

    rqr

    wrqr

    qwrqr

    qadam

    1

    2

    5

    5

    5

    5




    1. q t e e q r w q w r e e q w r q r

    2. q t e e q r w q w r e e q w r q r

    3. q t e e q r w q w r e e q w r q r

    4. q t e e q r w q w r e e q w r q r



    Algoritmning murakkabligi. O (| haystack | + | needle | + | Σ |) davriy bo'lmagan qismiy satrlar bo'yicha
    O (| haystack | · | needle | + | Σ |) davriy
    haystack - berilgan satr, needle – qismiy satr, Σ - solishtirish uchun alifbo

    1991-yilda Koul shuni ko'rsatdiki, davriy bo'lmagan sxemalar bo'yicha, algoritm satr bo'ylab to'liq o'tishda 3·|haystack| tadan ko'p bo'lmagan taqqoslashni amalga oshiradi.




    Boyer-Mura algoritmi (C++)
    #include using namespace std;
    # define NO_OF_CHARS 256
    void badCharHeuristic( string str, int size, int badchar[NO_OF_CHARS])
    {
    int i;
    for (i = 0; i < NO_OF_CHARS; i++) badchar[i] = -1;
    for (i = 0; i < size; i++) badchar[(int) str[i]] = i;
    }
    void search( string txt, string pat)
    {
    int m = pat.size(); int n = txt.size();
    int badchar[NO_OF_CHARS]; badCharHeuristic(pat, m, badchar); int s = 0;
    while(s <= (n - m))
    {
    int j = m - 1;
    while(j >= 0 && pat[j] == txt[s + j]) j--;
    if (j < 0)
    {

    }
    else


    }
    cout << s << endl;
    s += (s + m < n)? m-badchar[txt[s + m]] : 1;
    s += max(1, j - badchar[txt[s + j]]);

    }
    string txt= "ABAAABCD"; string pat = "ABC"; search(txt, pat);
    return 0;
    }


    int main()
    {
    String txt= "ABAAABCD"; string pat = "ABC"; search(txt, pat);
    return 0;
    }

    Download 254,53 Kb.
    1   2   3   4   5




    Download 254,53 Kb.

    Bosh sahifa
    Aloqalar

        Bosh sahifa



    Mustaqil ish mavzu: Marshurutlar va ularning vazifalari Qabullagan: Bajargan: nukus-2024

    Download 254,53 Kb.