يعد حساب عدد تكرارات سلسلة فرعية في سلسلة مهمة شائعة في البرمجة. قد يكون هذا ضروريا ، على سبيل المثال ، لتحليل البيانات النصية أو لإجراء عمليات معينة على السلاسل. في هذه المقالة ، سننظر في كيفية كتابة برنامج سيحسب بكفاءة عدد تكرارات سلسلة فرعية في سلسلة.
لحل هذه المشكلة ، يمكننا استخدام طرق وخوارزميات مختلفة. واحدة من أبسط الطرق وأكثرها شعبية هي استخدام حلقة من شأنها أن تعمل من خلال سلسلة ومقارنة سلاسل فرعية مع سلسلة فرعية معينة. إذا تطابق السلاسل الفرعية ، فإننا نزيد عدد الحدوث. هذا النهج سهل التنفيذ ، ولكن قد يكون له كفاءة منخفضة عند العمل مع سلاسل وسلاسل فرعية كبيرة.
نهج أكثر فعالية هو استخدام خوارزمية كانوث-موريس-برات (كمب). تسمح لك هذه الخوارزمية بتقليل عدد عمليات التحقق عند مقارنة الأحرف وتقليل وقت تشغيل البرنامج. يعتمد على إنشاء جدول بادئة يحتوي على معلومات حول السلاسل الذاتية لسلسلة. باستخدام هذا الجدول ، يمكننا تحديد مقدار ما يمكننا تغييره عند مقارنة سلسلة فرعية بالسلسلة الأصلية. خوارزمية كمب من الصعب أن نفهم ، ولكن إذا نفذت بشكل صحيح ، فإنه يمكن أن توفر مكاسب كبيرة في الأداء.
من المهم ملاحظة أن اختيار النهج لحل مشكلة حساب عدد تكرارات سلسلة فرعية في سلسلة يعتمد على متطلبات وقيود محددة. قد تكون بعض الخوارزميات أكثر ملاءمة وفعالية في مواقف معينة. لذلك ، من المهم أن يكون لديك معرفة بمختلف الأساليب والخوارزميات من أجل اختيار الحل الأمثل.
- الخوارزمية لحساب عدد تكرارات سلسلة فرعية في سلسلة
- تحديد المهمة
- تطوير الخوارزمية
- تطبيق الخوارزمية
- سؤال وجواب
- كيف يمكنني كتابة برنامج لحساب عدد من الحوادث من سلسلة فرعية في سلسلة?
- كيف يعمل البرنامج لحساب عدد مرات حدوث سلسلة فرعية في سلسلة?
- ماذا علي أن أفعل إذا كان البرنامج لا إخراج أي شيء?
- كيف يمكنني تحسين البرنامج لحساب عدد من الحوادث من سلسلة فرعية في سلسلة?
- هل من الممكن لكتابة برنامج لحساب عدد من الحوادث من سلسلة فرعية في سلسلة دون استخدام الحلقات?
الخوارزمية لحساب عدد تكرارات سلسلة فرعية في سلسلة
عندما نحتاج إلى إيجاد عدد تكرارات سلسلة فرعية في سلسلة ، يمكننا استخدام الخوارزمية التالية:
- تهيئة عداد الحدوث مع صفر.
- نتحقق من كل حرف من السلسلة:
- إذا تطابق الحرف الحالي مع الحرف الأول من السلسلة الفرعية ، فسنبدأ دورة التحقق من المطابقة.
- في الحلقة ، نتحقق من الأحرف المتتالية للسلسلة والسلاسل الفرعية.
- إذا لم تتطابق الأحرف ، اخرج من الحلقة وانتقل إلى الحرف التالي في السلسلة.
- إذا تطابق جميع أحرف السلسلة الفرعية ، فإننا نزيد من عداد الحدوث.
- إرجاع عداد الحدوث.
تتيح لك هذه الخوارزمية العثور على عدد تكرارات سلسلة فرعية في سلسلة في الوقت الخطي ، أي في الوقت المناسب بما يتناسب مع طول السلسلة. Он прост в реализации и не требует дополнительной памяти за исключением переменных для хранения счетчика и временных значений.
Пример кода на языке Python:
def count_substring(string, substring):
count = 0
for i in range(len(string) - len(substring) + 1):
if string[i:i + len(substring)] == substring:
count += 1
return count
string = "abracadabra"
substring = "abra"
print(count_substring(string, substring))
يقبل سلسلة وسلسلة فرعية كمدخلات ، ويعيد عدد تكرارات السلسلة الفرعية في السلسلة. نطبق الخوارزمية الموضحة أعلاه ، ونكرر من خلال جميع السلاسل الفرعية الممكنة ذات الطول المتساوي ومقارنتها مع السلسلة الفرعية الأصلية. إذا كانت تطابق ، ونحن زيادة العداد. في النهاية ، نخرج النتيجة.
تحديد المهمة
تتمثل المهمة في إنشاء برنامج يحسب عدد مرات تكرار سلسلة فرعية في سلسلة. هذه أداة مفيدة في معالجة المعلومات النصية عندما تحتاج إلى تحليل عدد المرات التي تحدث فيها سلسلة فرعية معينة في كمية كبيرة من البيانات.
الخطوات الرئيسية لحل هذه المشكلة هي:
- إدخال السلسلة الأصلية والسلسلة الفرعية;
- مقارنة كل حرف من السلسلة الأصلية مع الحرف الأول من السلسلة الفرعية;
- في حالة تطابق الأحرف ، تحقق من الأحرف التالية من السلسلة الأصلية والسلسلة الفرعية;
- إذا كانت جميع أحرف السلسلة الفرعية تتطابق مع أحرف السلسلة الأصلية ، فإن زيادة عداد الحدوث;
- انتقل إلى الحرف التالي من السطر الأصلي وكرر العملية حتى نهاية السطر;
- إخراج نتيجة عدد تكرارات سلسلة فرعية في سلسلة.
سيستخدم البرنامج الحلقات والمشغلين الشرطيين لإجراء المقارنات وحساب عدد التكرارات. هذه خوارزمية عالمية يمكن تطبيقها بلغات برمجة مختلفة.
تطوير الخوارزمية
عند تطوير خوارزمية لحساب عدد تكرارات سلسلة فرعية في سلسلة ، يجب مراعاة الخطوات التالية:
- قراءة بيانات الإدخال: سلسلة وسلسلة فرعية.
- تهيئة متغير العداد لعدد تكرارات سلسلة فرعية في سلسلة ذات قيمة صفرية.
- ابحث عن طول السلسلة والسلاسل الفرعية.
- إذا كان طول السلسلة الفرعية أكبر من طول السلسلة ، فقم بطباعة تكرارات صفرية وأكمل الخوارزمية.
- كرر على كل حرف في السلسلة:
- إذا كان الحرف الحالي يساوي الحرف الأول من السلسلة الفرعية ، فابدأ في مقارنة أحرف السلسلة الفرعية والسلسلة.
- إذا كانت جميع أحرف السلسلة الفرعية تتطابق مع أحرف السلسلة ، فقم بزيادة العداد بمقدار واحد.
- اطبع قيمة عداد تكرارات سلسلة فرعية في سلسلة.
| إدخال البيانات: | بيانات الإخراج: |
|---|---|
عدد الحوادث: 2
تطبيق الخوارزمية
يمكن أن تكون خوارزمية البحث عن عدد مرات تكرار سلسلة فرعية في سلسلة مفيدة في مجالات البرمجة المختلفة. فيما يلي بعض الأمثلة على تطبيق هذه الخوارزمية:
تحليل البيانات النصية: في بعض الحالات ، من الضروري تحليل كمية كبيرة من البيانات النصية والعثور على سلاسل فرعية معينة في كل نص. على سبيل المثال ، يمكنك استخدام هذه الخوارزمية لحساب عدد الإشارات إلى كلمات أو عبارات معينة في مجموعة من المقالات الإخبارية أو منشورات وسائل التواصل الاجتماعي.
العمل مع قواعد البيانات: عند العمل مع قواعد البيانات ، قد يكون من الضروري البحث عن قيم حقل معين وتحليلها. يمكن أن تكون خوارزمية البحث الفرعية مفيدة للبحث عن عدد مرات حدوث سلسلة فرعية معينة في حقل قاعدة البيانات وحسابها.
معالجة السجلات: تنتج السجلات كمية كبيرة من البيانات على أساس يومي ، ومن المهم أن يكون لديك طريقة لتحليل هذه البيانات. يمكن استخدام خوارزمية حساب عدد مرات حدوث سلسلة فرعية لتحليل السجلات وتحديد أحداث أو أنماط معينة.
كشط الويب: عند العمل مع تجريف الويب ، عندما تحتاج إلى الحصول على بيانات من صفحة ويب ، يمكن استخدام خوارزمية البحث وحساب تكرارات السلسلة الفرعية للعثور على عناصر أو بيانات معينة على الصفحة.
هذه ليست سوى بعض الأمثلة على استخدام خوارزمية البحث وحساب عدد مرات تكرار سلسلة فرعية في سلسلة. يمكن استخدامه في مختلف مجالات البرمجة والمساعدة في تحليل البيانات أو معالجة المعلومات.
سؤال وجواب
كيف يمكنني كتابة برنامج لحساب عدد من الحوادث من سلسلة فرعية في سلسلة?
يمكن كتابة برنامج لحساب عدد تكرارات سلسلة فرعية في سلسلة باستخدام حلقة تتم فيها مقارنة السلاسل الفرعية بالسلسلة الأصلية. في حالة وجود تطابق ، يتم زيادة العداد بمقدار واحد.
كيف يعمل البرنامج لحساب عدد مرات حدوث سلسلة فرعية في سلسلة?
يعمل البرنامج على النحو التالي: أولا ، يطلب من المستخدم إدخال سلسلة المصدر والسلسلة الفرعية التي يمكن العثور عليها. البرنامج ثم حلقات من خلال سلسلة المصدر ، مقارنة سلاسل فرعية مع سلسلة فرعية محددة. إذا تطابق السلاسل الفرعية ، يتم زيادة العداد بمقدار واحد. في نهاية البرنامج ، يتم عرض عدد مرات تكرار سلسلة فرعية في سلسلة.
ماذا علي أن أفعل إذا كان البرنامج لا إخراج أي شيء?