Bizda quyidagi matn bor bo’lsin
Download 412.49 Kb.
|
kurs iwi malumotlar
- Bu sahifa navigatsiya:
- Yuqoridagi ifoda qanday ishlaydi Bu oddiy matematika, biz oldingi oynadan joriy oynaning kasr qiymatini hisoblaymiz. Misol
Eslatma: Rabin va Karp tomonidan tavsiya etilgan xesh funksiyasi butun sonni hisoblaydi. Satr uchun butun son qiymati qatorning raqamli qiymatidir.
Misol uchun, agar barcha mumkin bo'lgan belgilar 1 dan 10 gacha bo'lsa, "122" ning raqamli qiymati 122 bo'ladi. Mumkin bo'lgan belgilar soni 10 dan ortiq (umuman 256) va naqsh uzunligi katta bo'lishi mumkin. Shunday qilib, raqamli qiymatlarni amalda butun son sifatida saqlash mumkin emas. Shuning uchun, son qiymat modulli arifmetika yordamida hisoblab chiqiladi, bu xesh qiymatlari butun o'zgaruvchida saqlanishi mumkinligiga ishonch hosil qilish uchun (xotira so'zlariga sig'ishi mumkin). Qayta ishlash uchun biz eng muhim raqamni olib tashlashimiz va xesh qiymatiga yangi eng kam ahamiyatli raqamni qo'shishimiz kerak. Qayta tiklash quyidagi formula yordamida amalga oshiriladi: hash( txt[s+1 .. s+m] ) = ( d ( hash( txt[s .. s+m-1]) – txt[s]*h ) + txt[s + m] ) mod q hash( txt[s .. s+m-1] ) : Shiftdagi xesh qiymati s hash( txt[s+1 .. s+m] ) : Keyingi siljishdagi xesh qiymati (yoki smena s +1) d : Raqam alifbodagi belgilar soni q : tub son h: d (m-1) Yuqoridagi ifoda qanday ishlaydi? Bu oddiy matematika, biz oldingi oynadan joriy oynaning kasr qiymatini hisoblaymiz. Misol: naqsh uzunligi 3 va qator “23456” Siz birinchi oynaning qiymatini (bu “234”) 234 deb hisoblaysiz. Keyingi “345” oynasining qiymatini qanday hisoblaysiz? Siz (234 - 2 * 100) * 10 + 5 ni bajarasiz va 345 ni olasiz. G'oyani amalga oshirish uchun bu erda ko'rsatilgan bosqichlarni bajaring: Dastlab naqshning hash qiymatini hisoblang. Iteratsiyani satr boshidan boshlang: Uzunligi m bo'lgan joriy pastki qatorning xesh qiymatini hisoblang. Agar joriy pastki satr va naqshning xesh qiymati bir xil bo'lsa, pastki qator naqsh bilan bir xilligini tekshiring. Agar ular bir xil bo'lsa, boshlang'ich indeksni to'g'ri javob sifatida saqlang. Aks holda, keyingi pastki qatorlar uchun davom eting. Kerakli javob sifatida boshlang'ich indekslarni qaytaring. Quyida yuqoridagi yondashuvni amalga oshirish ko'rsatilgan: C++ C Java Python 3 C# Javascript
Download 412.49 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling