16-mavzu. Satrlarda qismiy satrlarni qidirishni eng oddiy algoritmi. Satrlardan qismiy satrni qidirish algoritmi
Download 21,99 Kb.
|
16-
- Bu sahifa navigatsiya:
- Primitiv algoritmning muvaffaqiyatsizligi.
- Foydalanuvchining "dushmanligi".
- Protsessor arxitekturasi.
- Alifbo olchami.
- Boyer-Mur algoritmi.
16-mavzu. Satrlarda qismiy satrlarni qidirishni eng oddiy algoritmi. Satrlardan qismiy satrni qidirish algoritmi – bu matnda (text) qismiy satr (pattern) topishga imkon beradigan satrlar ustidagi algoritmlar sinfi. U matn muharrirlari, MBBT, qidiruv tizimlari, dasturlash tillari va boshqalarda o'rnatilgan funksiya sifatida ishlatiladi. Qidiruv vazifalarida qidiruv satrni “igna” (inglizchadan - "needle") va qidiruv o'tkaziladigan satrni “gʻaram” (ingliz tilidan - "haystack") deb belgilash odat tusiga kirgan. Shuningdek, biz qidirish olib boriladigan alifboni Σ bilan belgilaymiz. Primitiv algoritmning muvaffaqiyatsizligi. Agar satrlar birdan boshlab raqamlangan deb hisoblasak, eng oddiy “qo'pol kuch” (Brute force) algoritmi (sodda algoritm) quyidagicha boʻladi: #include using namespace std; int qidirish(string s1, string s2) { int M = s1.length(); int N = s2.length(); for (int i = 0; i <= N - M; i++) { int j; for (j = 0; j < M; j++) if (s2[i + j] != s1[j]) break; if (j == M) return i; } return -1;} int main() { string s1 = "for"; string s2 = "geeksforgeeks"; int res = qidirish(s1, s2); if (res == -1) cout << "topilmadi"; else cout << "topildi indexi " << res; return 0;} Eng oddiy qidirish algoritmi, eng yaxshisi, |haystack| - |needle| +1 taqqoslash; agar bir-biriga o'xshashliklar ko'p bo'lsa, tezlik O(|haystack|·|needle|) ga tushadi. Primitiv algoritm o'rtacha 2 soatlik taqqoslashda ishlayotgani isbotlangan. Bugungi kunda qismiy satrlarni qidirish algoritmlarining xilma-xilligi mavjud. Dasturchi bunday omillarga qarab, mosini tanlashi kerak.
Qoida tariqasida, matn tahrirlovchisida Boyer-Mur-Xorspul kabi eng oddiy evristik algoritmni olish kifoya-hatto juda sekin kompyuter ham bir soniya ichida qidirishni amalga oshira oladi. Agar matn hajmi gigabaytda o'lchanadigan bo'lsa yoki qidiruv ko'plab so'rovlarni bajaradigan serverda ishlayotgan bo'lsa, siz eng muvaffaqiyatli algoritmni tanlashingiz kerak bo'ladi. Masalan, plagiatni aniqlash dasturlari o'z ma'lumotlar bazasida saqlanadigan ko'plab hujjatlar orasida qismiy satr qidirish algoritmlari yordamida onlayn tekshiruvlarni amalga oshiradi. 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:
Mavzu yuzasidan savollar: 1. Eng kichik uzunlikdagi daraxt nima? 2. Prima algoritmining murakkabligini baholang. 3. Kruskal algoritmining murakkabligini baholang. Download 21,99 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2025
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling