الانتقال إلى المحتوى الرئيسي

كيفية العثور على عناصر متطابقة في صفيف: أفضل الطرق والخوارزميات

عند العمل مع المصفوفات في البرمجة ، غالبا ما تنشأ مهمة العثور على عناصر متطابقة. يمكن أن يكون هذا مفيدا ، على سبيل المثال ، في العثور على التكرارات أو في تحديد القيم الأكثر شيوعا.

هناك عدة طرق لحل هذه المشكلة. واحدة من أبسط هو مقارنة كل عنصر مع كل عنصر آخر من المصفوفة. ومع ذلك ، فإن هذه الطريقة لها تعقيد حسابي عال وقد تكون غير فعالة للمصفوفات الكبيرة.

طرق أكثر كفاءة هي استخدام جدول التجزئة أو فرز الصفيف. عند استخدام جدول تجزئة ، يمكنك حفظ كل عنصر من عناصر المصفوفة في الجدول والتحقق مما إذا كان قد تم حفظه بالفعل من قبل. إذا تم العثور على العنصر بالفعل ، فهو نسخة مكررة.

"النقطة الأساسية عند استخدام جدول التجزئة هي تحديد دالة التجزئة التي ستوزع عناصر المصفوفة بالتساوي عبر جميع خلايا الجدول لتقليل عدد الاصطدامات."

طريقة أخرى فعالة هي فرز المصفوفة والعثور على التكرارات من خلال مقارنة العناصر المجاورة. إذا اثنين من العناصر المجاورة متساوية ، ثم هو مكررة. يجعل فرز المصفوفة هذه المهمة أسهل ، حيث سيتم وضع التكرارات في مكان قريب.

يعتمد اختيار كيفية حل مشكلة العثور على عناصر متطابقة في مصفوفة على حجم المصفوفة والموارد المتاحة وكفاءة الخوارزمية. ستناقش هذه المقالة كل طريقة من هذه الطرق بمزيد من التفصيل وتقدم أمثلة على تنفيذها بلغات البرمجة المختلفة.

  1. طرق لمقارنة العناصر في صفيف
  2. 1. تمثال نصفي كامل
  3. 2. الفرز والمقارنة
  4. 3. باستخدام جداول التجزئة
  5. 4. باستخدام مجموعات
  6. 5. باستخدام الوظائف القياسية
  7. 6. استخدام خوارزميات المقارنة
  8. اختيار طريقة
  9. خوارزميات للبحث عن عناصر متطابقة في صفيف
  10. 1. التكرار من خلال العناصر في الحلقات المتداخلة
  11. 2. استخدام كائن أو خريطة للبحث عن التكرارات
  12. 3. استخدام مجموعة للعثور على عناصر فريدة
  13. 4. باستخدام طريقة تقليل
  14. طرق فعالة للعثور على العناصر المكررة
  15. 1. باستخدام جدول التجزئة
  16. 2. فرز المصفوفة
  17. 3. استخدام الأقنعة النقطية
  18. 4. باستخدام وظيفة تقليل
  19. 5. باستخدام العودية
  20. أمثلة الاستخدام ومقارنات الأداء للطرق المختلفة
  21. سؤال وجواب
  22. كيف يمكنني العثور على نفس العناصر في مجموعة?
  23. كيف يساعد استخدام جداول التجزئة في العثور على نفس العناصر في صفيف?
  24. هل هناك طرق بديلة للعثور على عناصر متطابقة في صفيف?
  25. ما هي الطريقة الأكثر فعالية للبحث عن عناصر متطابقة في صفيف?

طرق لمقارنة العناصر في صفيف

هناك عدة طرق لمقارنة العناصر في صفيف يمكن تطبيقها في مواقف مختلفة. فيما يلي بعض هذه الطرق:

1. تمثال نصفي كامل

واحدة من أبسط الطرق وأكثرها سذاجة لمقارنة العناصر في المصفوفة هي البحث الكامل. هذه الطريقة هي مقارنة كل عنصر من عناصر المصفوفة مع كل عنصر آخر. إذا كانت العناصر متساوية ، فإنها تعتبر نفسها. ومع ذلك ، فإن هذه الطريقة ليست فعالة ، خاصة بالنسبة للمصفوفات الكبيرة ، لأنها تتطلب الكثير من الوقت والموارد.

2. الفرز والمقارنة

تتمثل الطريقة الثانية في فرز المصفوفة ثم مقارنة العناصر المجاورة. إذا كان هناك عنصران متجاورون متساويان ، فسيتم اعتبارهما متماثلين. هذه الطريقة أكثر كفاءة من التكرار الكامل ، لأن فرز المصفوفة يجعل عملية المقارنة أسهل.

3. باستخدام جداول التجزئة

جداول التجزئة هي هياكل بيانات تسمح لك بتخزين العناصر في شكل مفاتيح وقيم. وهي تستند إلى وظائف التجزئة التي تحول المفاتيح إلى أرقام فريدة. في سياق البحث عن عناصر متطابقة في مصفوفة ، يمكنك إنشاء جدول تجزئة حيث تكون المفاتيح هي عناصر المصفوفة ، والقيم هي عدد تكرارها. ثم يمكنك الذهاب من خلال جدول التجزئة والعثور على العناصر مع عدد من التكرار أكبر من واحد ، مما يعني أن هذه العناصر هي نفسها. هذه الطريقة فعالة ولها وقت تنفيذ خطي.

4. باستخدام مجموعات

المجموعات هي هياكل بيانات تخزن عناصر فريدة فقط. في سياق البحث عن عناصر متطابقة في مصفوفة ، يمكنك إنشاء مجموعة وإضافة كل عنصر من عناصر المصفوفة إليها. إذا كان العنصر موجودا بالفعل في المجموعة عند إضافته ، فهذا العنصر هو نفسه. هذه الطريقة فعالة أيضا ولها وقت تنفيذ خطي.

5. باستخدام الوظائف القياسية

توفر العديد من لغات البرمجة وظائف مضمنة للبحث عن عناصر متطابقة في المصفوفات. على سبيل المثال ، في جافا سكريبت ، يمكنك استخدام طريقة التصفية() لتصفية مصفوفة وترك عناصر متطابقة فقط.

6. استخدام خوارزميات المقارنة

هناك أيضا خوارزميات خاصة لمقارنة العناصر التي يمكن تطبيقها في مواقف مختلفة. على سبيل المثال ، خوارزمية أهو-كوراسيك يمكن استخدامها للبحث عن جميع سلاسل فرعية في سلسلة التي تحدث أيضا في سلاسل أخرى.

اختيار طريقة

يعتمد اختيار طريقة مقارنة العناصر في المصفوفة على عوامل مختلفة ، مثل حجم المصفوفة والموارد المتاحة وتعقيد المهمة ومتطلبات الأداء. من المهم مراعاة كل هذه العوامل عند اختيار طريقة لمهمة معينة.

الآن بعد أن أصبحت على دراية بالطرق المختلفة لمقارنة العناصر في مصفوفة ، يمكنك اختيار أنسبها لمهمتك واستخدامها في التعليمات البرمجية الخاصة بك.

خوارزميات للبحث عن عناصر متطابقة في صفيف

عند العمل مع المصفوفات ، قد يكون من الضروري العثور على نفس العناصر. في هذا الجزء من المقالة ، سننظر في العديد من الخوارزميات التي ستساعد في حل هذه المشكلة.

1. التكرار من خلال العناصر في الحلقات المتداخلة

الطريقة الأبسط والأكثر وضوحا للعثور على عناصر متطابقة هي التكرار من خلال جميع عناصر المصفوفة باستخدام حلقتين متداخلتين:

دعونا آر = [1, 2, 3, 4, 5, 4, 3, 2, 1];

دع التكرارات = [];

إلى عن على (دعني = 0 ؛ أنا < آر.الطول ؛ أنا {) {

إلى عن على (دع ي = أنا + 1 ؛ ي < آر.طول ؛ ي++) {

إذا (آر [أنا] = = = آر [ي]) {

التكرارات.دفع (آر [أنا]);

}

}

}

وحدة التحكم.سجل (التكرارات);

هذه الخوارزمية لها تعقيد ا (ن^2) ، لأننا نقارن كل عنصر مع كل عنصر. إذا كانت المصفوفة تحتوي على عناصر ن ، فسنحتاج إلى مقارنات ن^2. هذه الخوارزمية غير فعالة للمصفوفات الكبيرة.

2. استخدام كائن أو خريطة للبحث عن التكرارات

لتسريع عملية البحث عن التكرارات ، يمكنك استخدام كائن أو خريطة. تسمح لك هياكل البيانات هذه بالتحقق بسرعة من وجود عنصر.

دعونا آر = [1, 2, 3, 4, 5, 4, 3, 2, 1];

دع التكرارات = [];

دع الخريطة = {};

إلى عن على (دعني = 0 ؛ أنا < آر.الطول ؛ أنا {) {

إذا (خريطة [آر [أنا]] = = = 1) {

التكرارات.دفع (آر [أنا]);

}

إذا (خريطة [آر [أنا]]) {

خريطة [آر [أنا]]++;

} آخر {

خريطة [أر [أنا]] = 1;

}

}

وحدة التحكم.سجل (التكرارات);

في هذه الخوارزمية ، نستخدم كائن الخريطة لتتبع عدد تكرارات كل عنصر في المصفوفة. إذا تمت إضافة العنصر بالفعل إلى الخريطة ، فإننا نضيفه إلى مصفوفة التكرارات. هذه الخوارزمية لها تعقيد ا (ن) ، لأننا نمر عبر المصفوفة مرة واحدة فقط ، ونؤدي فقط عددا ثابتا من العمليات لكل عنصر.

3. استخدام مجموعة للعثور على عناصر فريدة

إذا كنا بحاجة إلى العثور على عناصر فريدة فقط ، فيمكننا استخدام بنية البيانات المحددة:

دعونا آر = [1, 2, 3, 4, 5, 4, 3, 2, 1];

السماح فريدة من نوعهاعناصر = مجموعة جديدة (آر);

وحدة التحكم.سجل ([...عناصر فريدة]);

يقوم الضبط تلقائيا بإزالة التكرارات من المصفوفة ، وتحويلها إلى العديد من العناصر الفريدة. ثم نقوم بتحويل المجموعة إلى صفيف باستخدام عامل الانتشار. هذه الخوارزمية لديها تعقيد س (ن) ، لأننا نذهب من خلال مجموعة مرة واحدة فقط ، وأداء عملية إضافة إلى مجموعة لكل عنصر.

4. باستخدام طريقة تقليل

يمكن استخدام طريقة الاختزال للبحث عن عناصر متطابقة في صفيف. في هذه الحالة ، سنقوم بتجميع جميع التكرارات في المصفوفة:

دعونا آر = [1, 2, 3, 4, 5, 4, 3, 2, 1];

السماح التكرارات = آر.تقليل ((لجنة التنسيق الإدارية ، كور ، مؤشر) = > {

إذا (آر.إندكسوف (كور) != = مؤشر & & لجنة التنسيق الإدارية.فهرس (كور) = = = -1) {

لجنة التنسيق الإدارية.دفع (كور);

}

عودة لجنة التنسيق الإدارية;

}, []);

وحدة التحكم.سجل (التكرارات);

نكرر من خلال جميع عناصر المصفوفة ولكل عنصر نتحقق مما إذا كان في المصفوفة قبل الفهرس الحالي وما إذا كان مفقودا بالفعل في مجمع لجنة التنسيق الإدارية. إذا كانت هذه هي الحالة ، فقم بإضافتها إلى مصفوفة التكرارات باستخدام طريقة الدفع. هذه الخوارزمية لديها تعقيد س (ن) ، لأننا نمر عبر المصفوفة مرة واحدة فقط.

اعتمادا على المهمة المحددة والمصفوفة ، قد يكون اختيار الخوارزمية مختلفا. قد تكون بعض الخوارزميات المقدمة أكثر كفاءة من غيرها ، اعتمادا على حجم وخصائص المصفوفة.

طرق فعالة للعثور على العناصر المكررة

يعد العثور على عناصر مكررة في مصفوفة مهمة شائعة عند العمل بكمية كبيرة من البيانات. هناك عدة طرق وخوارزميات لحل هذه المشكلة بشكل فعال.

1. باستخدام جدول التجزئة

واحدة من أكثر الطرق فعالية للعثور على العناصر المكررة هي استخدام جدول التجزئة. في هذه الحالة ، يتم إضافة كل عنصر من عناصر المصفوفة إلى جدول التجزئة ، ثم يتم التحقق مما إذا كان هناك بالفعل مثل هذا العنصر في الجدول. إذا كان العنصر موجودا بالفعل ، فإنه يعتبر متكررا.

2. فرز المصفوفة

طريقة أخرى فعالة هي فرز المصفوفة والبحث عن العناصر المكررة. بعد فرز المصفوفة ، يمكنك بسهولة العثور على عناصر مكررة من خلال مقارنة كل عنصر بالعنصر السابق.

3. استخدام الأقنعة النقطية

يمكن استخدام الأقنعة النقطية للمصفوفات التي تحتوي على عدد كبير من العناصر. يتم تمثيل كل عنصر من عناصر المصفوفة كقناع بت ، ثم يتم التحقق مما إذا كان هذا القناع قد تكرر بالفعل. هذه الطريقة أكثر تعقيدا ، لكنها يمكن أن تكون أكثر فعالية للمصفوفات الكبيرة.

4. باستخدام وظيفة تقليل

في لغات البرمجة التي تدعم وظيفة الحد ، يمكنك استخدامها للعثور على عناصر مكررة. تسمح لك وظيفة التخفيض بدمج جميع عناصر المصفوفة في قيمة واحدة ، ثم البحث عن العناصر المكررة في هذه القيمة.

5. باستخدام العودية

يمكن أيضا استخدام العودية للعثور على عناصر مكررة. ستقوم الدالة العودية بفحص كل عنصر من عناصر المصفوفة من أجل المساواة مع العناصر الأخرى وإرجاع النتيجة. يمكن أن تكون هذه الطريقة مفيدة للمصفوفات الصغيرة.

يعتمد اختيار كيفية البحث عن العناصر المكررة على كمية البيانات والكفاءة المطلوبة وأدوات البرمجة المتاحة. كل طريقة من هذه الطرق لها مزاياها وعيوبها ، لذلك من المهم اختيار الطريقة المناسبة لمهمة محددة.

أمثلة الاستخدام ومقارنات الأداء للطرق المختلفة

يتم عرض إمكانيات مقارنة أداء الطرق المختلفة للعثور على عناصر متطابقة في صفيف أدناه:

  1. }

}
return result;
}

let arr = [1, 2, 3, 4, 5, 2, 4];

let duplicates = findDuplicates(arr);

Метод с использованием метода filter: