التابع bsearch‎ الخاص بالصنف Range في روبي

من موسوعة حسوب
< Ruby‏ | Range
مراجعة 17:08، 30 أكتوبر 2018 بواسطة محمد-بغات (نقاش | مساهمات) (أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>bsearch‎</code> الخاص بالصنف <code>Range</code> في روبي}}</noinclude> تصنيف: Ruby تصني...')
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

باستخدام البحث الثنائي (binary search)، يبحث التابع bsearch عن قيمة من المجال تفي بالشرط المعطى في مدة O (log n) حيث n هو حجم المجال. يمكنك استخدام هذا التابع في حالتين: وضع البحث الأدنى (find-minimum mode)، أو وضع البحث العادي (find-any mode). وفي كلتا الحالتين، يجب أن تكون عناصر المجال مُرتبة (sorted) بالنسبة للكتلة. في وضع البحث الأدنى (يعد هذا خيارًا جيدًا في الحالات العادية) ، يجب أن تُعيد الكتلة إما true أو false ، ويجب أن تكون هناك قيمة x بحيث:

  • تعيد الكتلة القيمة false لكل القيمة الأصغر من x، وتعيد true لأي قيمة أكبر من أو تساوي x.
  • إن كان x مُتضمنًا في المجال، فسيعيد هذا التابع القيمة x. خلا ذلك، فسيعيد الصفر.

في وضع البحث العادي (يشبه bsearch (3))، يجب أن تعيد الكتلة عددًا، ويجب أن تكون هناك قيمتان x و y (تحققان x <= y) بحيث:

  • تعيد الكتلة عددًا موجبًا لكل v بحيث v <x، وتعيد الصفر لـكل v يحقق x <= v <y، أو تعيد عددًا سالبًا لكل v يحقق y <= v.

يعيد التابع bsearch أي قيمة ضمن تقاطع المجال المحدد و x… y (إن وجد). إن لم تكن هناك أي قيمة تحقق الشرط، فستُعاد nil.

يجب عدم خلط الوضعين في وقت واحد؛ يجب أن تعيج الكتلة دائمًا إما true أو false، أو تعيد دائمًا عددًا. لا يمكن معرفة القيمة المُلتقطة في كل عملية تكرار (iteration).

البنية العامة

bsearch {|obj| block }   value

القيمة المُعادة

أمثلة

مثال على استخدام التابع bsearch‎:

ary = [0, 4, 7, 10, 12]
(0...ary.size).bsearch {|i| ary[i] >= 4 } #=> 1
(0...ary.size).bsearch {|i| ary[i] >= 6 } #=> 2
(0...ary.size).bsearch {|i| ary[i] >= 8 } #=> 3
(0...ary.size).bsearch {|i| ary[i] >= 100 } #=> nil
(0.0...Float::INFINITY).bsearch {|x| Math.log(x) >= 0 } #=> 1.0‎

انظر أيضا

  • التابع begin: يعيد الكائن الذي يحدد بداية المجال.
  • التابع cover?‎: يعيد القيمة true إن كان obj محصورًا بين بداية ونهاية المجال.

مصادر