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

السؤال

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
نشر

خوارزمية البحث (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
نشر
  بتاريخ On 24‏/2‏/2024 at 14:21 قال Ail Ahmed:

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

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

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

أظهر المزيد  

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

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

  • 0
نشر
  بتاريخ On 24‏/2‏/2024 at 14:22 قال 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 

 

  بتاريخ On 24‏/2‏/2024 at 14:28 قال Mahmoud Hassan19:

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

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

أظهر المزيد  

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

  • 0
نشر
  بتاريخ On 24‏/2‏/2024 at 14:33 قال 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
نشر
  بتاريخ On 24‏/2‏/2024 at 14:37 قال Taha Khalid:

حل ممتاز جدا 

أظهر المزيد  

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

  بتاريخ On 24‏/2‏/2024 at 14:28 قال Mahmoud Hassan19:

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

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

أظهر المزيد  

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

  • 0
نشر (معدل)
  بتاريخ On 24‏/2‏/2024 at 14:38 قال Ail Ahmed:

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

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

أظهر المزيد  

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

تم التعديل في بواسطة Mahmoud Hassan19
  • 0
نشر
  بتاريخ On 24‏/2‏/2024 at 14:46 قال Mahmoud Hassan19:

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

أظهر المزيد  

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

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

  بتاريخ On 24‏/2‏/2024 at 14:28 قال Mahmoud Hassan19:

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

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

أظهر المزيد  

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

  بتاريخ On 24‏/2‏/2024 at 14:33 قال 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...