اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

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

وتعمل بالآلية التالية: 

  1. ابحث عن أصغر وأكبر عنصر في المصفوفة.
  2. احسب الفارق بين قيمة العنصر المستهدف وأصغر عنصر في المصفوفة.
  3. قسّم هذا الفارق على الفارق بين أكبر وأصغر عنصر في المصفوفة.
  4. اضرب النتيجة بـ (عدد العناصر في المصفوفة - 1) واحصل على فهرس تقريبي للعنصر المستهدف.
  5. قارن العنصر في هذا الفهرس مع العنصر المستهدف.
  6. إذا كانا متطابقين، فقد وجدت العنصر المستهدف.
  7. إذا لم يكونا متطابقين، فكرّر الخطوات من 3 إلى 6 مع تعديل الفهرس التقريبي بناءً على المقارنة.

وهي أسرع من خوارزمية البحث الثنائي (Binary Search) في بعض الحالات وسهلة الفهم والتنفيذ.

لكن لا تعمل بشكل جيد مع البيانات غير المرتبة وأبطأ من خوارزمية البحث الثنائي في بعض الحالات، والإختيار يعتمد على:

  • حجم البيانات.
  • ترتيب البيانات.
  • الأداء المطلوب.
  • 0
نشر

خوارزمية Interpolation Search هي خوارزمية بحث تستخدم للبحث عن عنصر في مجموعة مرتبة تختلف هذه الخوارزمية عن بحث الثنائي Binary Search) في الطريقة التي تقوم بها لتقدير موقع العنصر المستهدف بينما يقوم البحث الثنائي بتقسيم المجموعة إلى نصفين وفحص القسم الذي يحتمل أن يحتوي على العنصر يستخدم بحث التداخل تقديرًا أكثر تعقيدًا لتحديد موقع العنصر

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

الآن بالنسبة لسؤالك حول ما إذا كانت خوارزمية Interpolation Search أفضل من Binary Search يعتمد ذلك على الحالة الخاصة والبيانات المتاحة في بعض الحالات قد يكون بحث التداخل أسرع خاصة عندما تكون البيانات موزعة بشكل متساوٍ ولكن في حالات أخرى قدلا تؤدي إلى أداء أفضل من بحث الثنائي خاصة إذا كانت البيانات غير متساوية

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

  • 0
نشر

تمام , طيب لو حبيت اكتب الخورزميا ده بلغه بايثون فا ممكن اعرف المعادله الخطيه او الخطوات المفروض امش عليها

من غير كتاب الكود لو سمحت

من غير ما حضرتك يعني تكتب كود

  • 0
نشر

خوارزمية البحث (Interpolation Search) وخوارزمية البحث الثنائي (Binary Search) هما تقنيتان للبحث داخل مصفوفات مرتبة،
كل منهم له مميزات وعيوب تجعله مناسبًا لمواقف معينه في المشروع او المشكله التي تواجهها.

خوارزمية البحث الثنائي (Binary Search)

  • تقسم المصفوفة إلى نصفين بشكل متكرر للعثور على العنصر المستهدف.
  •  تعمل بشكل جيد مع البيانات المرتبة فقط.
  • التعقيد الزمني O(log n) حيث n هو عدد العناصر في المصفوفة.
  •  مثلا يمكنك استخدامه في البحث عن كلمة في قاموس أو بحث عن رقم في دليل هاتف مرتب.

خوارزمية البحث بالاستيفاء (Interpolation Search)

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

كيف تختار واحده منهم في حل المشكله 

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

في النهايه الاختيار بين خوارزمية ا(Interpolation Search) وخوارزمية البحث الثنائي يعتمد على طبيعة البيانات والمتطلبات الخاصة للتطبيق المستخدم فيه والمشكله التي تواجههك.

ساعطيك مثال عملي سيواجهك في مرحله ما يمكنه مساعدتك في كيف تختار اي منهم في حل مشكلتك
 

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

حل باستخدام Interpolation Search:

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

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

حل باستخدام Binary Search:

البحث الثنائي لا يتأثر بتوزيع القيم داخل البيانات. طالما أن البيانات مرتبة، يمكن للبحث الثنائي أن يجد العنصر المستهدف بشكل موثوق في O(log n) خطوات، مما يجعله خيارًا آمنًا وموثوقًا في معظم الحالات.

المشكلة قد لا يكون البحث الثنائي سريعًا مثل البحث بالاستيفاء في حالة توزيع القيم بشكل موحد
 

يمكنني اعطيك مشكله قد وجهتها في leetcode وتختبار نفسك بها في الحل 

المشكله
لديك مصفوفة من الأعداد الصحيحة المرتبة تصاعديًا. كتابة برنامج بلغة C++ يقوم بالبحث عن عنصر معين في المصفوفه. إذا تم العثور على العنصر، يجب على البرنامج طباعة موقع العنصر (index) داخل المصفوفة. إذا لم يتم العثور على العنصر، يجب طباعة رسالة تفيد بذلك.

المتطلبات:

  • المصفوفة مرتبة تصاعديًا.
  • يمكن افتراض أن المصفوفة لا تحتوي على عناصر مكررة.
     
 int arr[] = {2, 3, 4, 10, 40};

 

  • 0
نشر
بتاريخ 7 دقائق مضت قال Ail Ahmed:

تمام , طيب لو حبيت اكتب الخورزميا ده بلغه بايثون فا ممكن اعرف المعادله الخطيه او الخطوات المفروض امش عليها

من غير كتاب الكود لو سمحت

من غير ما حضرتك يعني تكتب كود

بالتأكيد  إليك فكرة عن خوارزمية بحث التداخل (Interpolation Search) بدون الكود
تقدير الموقع
image.png.99d8b0ef93c94b3f144bb77e5a9d3b14.png

حيث
1-pos هو الموقع المقدر للعنصر
2-x هو القيمة التي نبحث عنها
3-arr[low]] و arr[high] هم قيم الحد الأدنى والحد الأقصى في المجموعة

  • 0
نشر
بتاريخ 10 دقائق مضت قال Taha Khalid:

خوارزمية البحث (Interpolation Search) وخوارزمية البحث الثنائي (Binary Search) هما تقنيتان للبحث داخل مصفوفات مرتبة،
كل منهم له مميزات وعيوب تجعله مناسبًا لمواقف معينه في المشروع او المشكله التي تواجهها.

خوارزمية البحث الثنائي (Binary Search)

  • تقسم المصفوفة إلى نصفين بشكل متكرر للعثور على العنصر المستهدف.
  •  تعمل بشكل جيد مع البيانات المرتبة فقط.
  • التعقيد الزمني O(log n) حيث n هو عدد العناصر في المصفوفة.
  •  مثلا يمكنك استخدامه في البحث عن كلمة في قاموس أو بحث عن رقم في دليل هاتف مرتب.

خوارزمية البحث بالاستيفاء (Interpolation Search)

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

كيف تختار واحده منهم في حل المشكله 

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

في النهايه الاختيار بين خوارزمية ا(Interpolation Search) وخوارزمية البحث الثنائي يعتمد على طبيعة البيانات والمتطلبات الخاصة للتطبيق المستخدم فيه والمشكله التي تواجههك.

ساعطيك مثال عملي سيواجهك في مرحله ما يمكنه مساعدتك في كيف تختار اي منهم في حل مشكلتك
 

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

حل باستخدام Interpolation Search:

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

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

حل باستخدام Binary Search:

البحث الثنائي لا يتأثر بتوزيع القيم داخل البيانات. طالما أن البيانات مرتبة، يمكن للبحث الثنائي أن يجد العنصر المستهدف بشكل موثوق في O(log n) خطوات، مما يجعله خيارًا آمنًا وموثوقًا في معظم الحالات.

المشكلة قد لا يكون البحث الثنائي سريعًا مثل البحث بالاستيفاء في حالة توزيع القيم بشكل موحد
 

يمكنني اعطيك مشكله قد وجهتها في leetcode وتختبار نفسك بها في الحل 

المشكله
لديك مصفوفة من الأعداد الصحيحة المرتبة تصاعديًا. كتابة برنامج بلغة C++ يقوم بالبحث عن عنصر معين في المصفوفه. إذا تم العثور على العنصر، يجب على البرنامج طباعة موقع العنصر (index) داخل المصفوفة. إذا لم يتم العثور على العنصر، يجب طباعة رسالة تفيد بذلك.

المتطلبات:

  • المصفوفة مرتبة تصاعديًا.
  • يمكن افتراض أن المصفوفة لا تحتوي على عناصر مكررة.
     
 int arr[] = {2, 3, 4, 10, 40};

 

انا حلت بلغه الباثيون وباستخدم Binary Search

arr = [2,3,4,10,40]

start = 0
end = len(arr) - 1
n = 10
while start <= end:

    mid = start + (end - start) // 2

    if n == arr[mid]:
        print(f"index: {mid}")
        break


    elif n > arr[mid]:
        start = mid + 1

    elif n < arr[mid]:
        end = mid - 1 

 

بتاريخ 5 دقائق مضت قال Mahmoud Hassan19:

بالتأكيد  إليك فكرة عن خوارزمية بحث التداخل (Interpolation Search) بدون الكود
تقدير الموقع
image.png.99d8b0ef93c94b3f144bb77e5a9d3b14.png

حيث
1-pos هو الموقع المقدر للعنصر
2-x هو القيمة التي نبحث عنها
3-arr[low]] و arr[high] هم قيم الحد الأدنى والحد الأقصى في المجموعة

تمام , شكرااا جدا لحضرتك

  • 0
نشر
بتاريخ 3 دقائق مضت قال Ail Ahmed:

انا حلت بلغه الباثيون وباستخدم Binary Search

arr = [2,3,4,10,40]

start = 0
end = len(arr) - 1
n = 10
while start <= end:

    mid = start + (end - start) // 2

    if n == arr[mid]:
        print(f"index: {mid}")
        break


    elif n > arr[mid]:
        start = mid + 1

    elif n < arr[mid]:
        end = mid - 1 

 

حل ممتاز جدا 

  • 0
نشر
بتاريخ الآن قال Taha Khalid:

حل ممتاز جدا 

بجد , شكرااا جدا لحضرتك والله

بتاريخ 13 دقائق مضت قال Mahmoud Hassan19:

بالتأكيد  إليك فكرة عن خوارزمية بحث التداخل (Interpolation Search) بدون الكود
تقدير الموقع
image.png.99d8b0ef93c94b3f144bb77e5a9d3b14.png

حيث
1-pos هو الموقع المقدر للعنصر
2-x هو القيمة التي نبحث عنها
3-arr[low]] و arr[high] هم قيم الحد الأدنى والحد الأقصى في المجموعة

طيب حضرتك هي اي low الا فيه الاول ده

  • 0
نشر (معدل)
بتاريخ 9 دقائق مضت قال Ail Ahmed:

بجد , شكرااا جدا لحضرتك والله

طيب حضرتك هي اي low الا فيه الاول ده

 low وhigh تمثلان حدود النطاق الحالي الذي نقوم بالبحث فيه
low وhigh تستمر في التغير بحيث يتم تضييق نطاق البحث  حتى نجد العنصر او يصبح الناتج فارغ

تم التعديل في بواسطة Mahmoud Hassan19
  • 0
نشر
بتاريخ 1 دقيقة مضت قال Mahmoud Hassan19:

 low وhigh تمثلان حدود النطاق الحالي الذي نقوم بالبحث فيه

اه , ده زي كده في خورزميات Binary Search  ام بنحدد البدايه والنهايه 

شكرااا جدا لحضرتك

بتاريخ 27 دقائق مضت قال Mahmoud Hassan19:

بالتأكيد  إليك فكرة عن خوارزمية بحث التداخل (Interpolation Search) بدون الكود
تقدير الموقع
image.png.99d8b0ef93c94b3f144bb77e5a9d3b14.png

حيث
1-pos هو الموقع المقدر للعنصر
2-x هو القيمة التي نبحث عنها
3-arr[low]] و arr[high] هم قيم الحد الأدنى والحد الأقصى في المجموعة

سوال كمان لو سمحت مش المعادله ده هي زي المعادله المستخدم في خورزميات Bianry Search  ال هي ده

بتاريخ 23 دقائق مضت قال Ail Ahmed:
    mid = start + (end - start) // 2

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...