في علوم الكمبيوتر والرياضيات ، هناك العديد من المشكلات المتعلقة بإيجاد الحدود والحدود. إحدى هذه المهام هي العثور على أصغر رقم ك ، حيث 2^ك سيكون أكبر من رقم معين ن.
في كثير من الحالات ، عند العمل مع عمليات البت ، قد تنشأ مواقف عندما يكون من الضروري العثور على أقرب قوة لاثنين تتجاوز رقما معينا. يمكن أن تكون هذه الخوارزمية مفيدة أيضا في تحسين الترميز ومهام معالجة البيانات.
لحل هذه المشكلة ، يمكنك استخدام خوارزمية بسيطة لإيجاد قوة اثنين. نبدأ بواحد ونضرب في 2 بالتتابع حتى نصل إلى قيمة تتجاوز الرقم المحدد ن. بمجرد أن نحصل على قوة اثنين أكبر من ن ، نجد الحد الأدنى لقيمة ك عند أي 2^ك سيكون أكبر من ن.
- طريقة القوة الغاشمة
- بحث ثنائي
- خوارزمية العودية
- سؤال وجواب
- كيف يمكن أن نجد أصغر عدد ك, الذي 2^ك سيكون أكبر من عدد معين ن?
- كيف يمكننا معرفة أصغر عدد صحيح ك عند أي 2^ك يتجاوز عددا طبيعيا معينا ن?
- كيف يمكننا استخدام البرمجة بيثون للعثور على أصغر ك فيها 2^ك أكبر من عدد معين ن?
- هل من الممكن العثور على أصغر ك الذي 2^ك يصبح أكبر من عدد معين ن, دون استخدام دورات أو اللوغاريتمات?
طريقة القوة الغاشمة
طريقة القوة الغاشمة هي واحدة من أبسط الطرق وأكثرها سهولة للعثور على الأصغر ك ، حيث 2^ك سيكون أكبر من رقم معين ن.
بادئ ذي بدء ، دعنا نحدد ما هو 2^ك. هذا يعني رفع الرقم 2 إلى قوة ك. فمثلا, 2^3 = 2 * 2 * 2 = 8.
لذلك ، لإيجاد أصغر ك عنده 2^ك > ن ، يمكننا فقط التكرار على قيم ك حتى نجد العدد الصحيح.
لنبدأ بـ ك = 0 وزيادته بمقدار 1 مع كل تكرار للحلقة. لكل قيمة ك ، نحسب 2^ك وتحقق مما إذا كان أكبر من رقم معين ن.
Пример алгоритма нахождения наименьшего k с использованием метода перебора:
function findK(n) {
let k = 0;
let powerOfTwo = 1;
while (powerOfTwo <= n) {
powerOfTwo *= 2;
k++;
}
return k;
}
// Пример использования функции
const n = 17;
const smallestK = findK(n);
console.log(smallestK); // Выведет 5
В этом примере мы начинаем с k = 0 и powerOfTwo = 1. ثم نضرب القوةاثنين في 2 في كل تكرار للحلقة حتى تصبح أكبر من أو تساوي رقما معينا ن. في نفس الوقت ، نزيد قيمة ك في 1 بعد كل تكرار.
عندما نجد الأصغر ك ، حيث 2^ك سيكون أكبر من رقم معين ن ، نعيد هذه القيمة.
بحث ثنائي
البحث الثنائي هو خوارزمية فعالة للبحث عن عنصر في مصفوفة مرتبة. يعتمد على تقسيم صفيف إلى جزأين ثم البحث عن عنصر في أحدهما.
يمكن وصف خوارزمية البحث الثنائي على النحو التالي:
- قم بتعيين القيم الأولية للحدود اليمنى واليسرى لمقطع البحث.
- ابحث عن منتصف المقطع باستخدام الصيغة: الوسط = (الحد الأيسر + الحد الأيمن) / 2.
- قارن العنصر المطلوب بالعنصر الموجود في منتصف المقطع.
- إذا كان العنصر الموجود في منتصف المقطع مساويا للعنصر المطلوب ، فسيتم إكمال البحث.
- إذا كان العنصر الموجود في منتصف المقطع أصغر من العنصر المطلوب ، فقم بتحريك الحد الأيسر للمقطع إلى اليمين موضع واحد من المنتصف.
- إذا كان العنصر الموجود في منتصف المقطع أكبر من العنصر المطلوب ، فقم بتحريك الحد الأيمن للمقطع إلى اليسار موضع واحد من المنتصف.
- كرر الخطوات من 2 إلى 6 حتى يتم العثور على العنصر المطلوب أو حتى يصبح الحد الأيسر أكبر من الحد الأيمن.
يتم إجراء البحث الثنائي في الوقت المناسب س (سجل ن) ، أين ن هو حجم المصفوفة التي تم فرزها. يمكن استخدام هذه الخوارزمية لحل المشكلات المختلفة ، بما في ذلك العثور على الأصغر ك حيث 2^ك أكبر من رقم معين ن.
النظر في مثال:
| مجموعة مرتبة | الرقم المطلوب | النتيجة |
| [1, 2, 4, 8, 16, 32, 64] | 15 | أصغر ك: 4 |
| [1, 2, 4, 8, 16, 32, 64] | 50 | أصغر ك: 6 |
| [1, 2, 4, 8, 16, 32, 64] | 128 | أصغر ك: 7 |
وبالتالي ، باستخدام البحث الثنائي ، يمكننا العثور بشكل فعال على الأصغر ك عند أي 2^ك أكبر من رقم معين ن.
خوارزمية العودية
للعثور على أصغر عدد ك التي 2ك > ن ، يمكن استخدام خوارزمية متكررة.
ستتألف الخوارزمية من استدعاء دالة تزيد من قيمة ك حتى الشرط 2 ك > ن تم الوفاء به.
يظهر تنفيذ هذه الخوارزمية في بايثون أدناه.
ديف فيند_ك (ن ، ك = 0):
إذا أسير الحرب (2 ، ك) > ن:
عودة ك
آخر:
العثور على العودة (ن ، ك+1)
في هذه الخوارزمية ، وظيفة فيند_ك تستدعي نفسها بشكل متكرر ، مما يزيد من قيمة ك بواسطة 1 مع كل مكالمة. إذا تم استيفاء الشرط 2 ك > ن ، تقوم الدالة بإرجاع القيمة ك.
مثال على استخدام هذه الخوارزمية:
ن = 10
ك = العثور على_ك (ن)
طباعة (ك) # الإخراج: 4
في هذا المثال ، قيمة المتغير ن هو 10. سيتم استدعاء دالة فيند_ك بشكل متكرر حتى تصل إلى القيمة ك = 4 ، حيث يتم استيفاء الشرط 2 ك > ن. نتيجة لذلك ، تقوم الدالة بإرجاع القيمة ك = 4.
سؤال وجواب
كيف يمكن أن نجد أصغر عدد ك, الذي 2^ك سيكون أكبر من عدد معين ن?
من أجل العثور على أصغر رقم ك ، حيث سيكون 2^ك أكبر من الرقم ن ، تحتاج إلى زيادة قيمة ك باستمرار حتى يصبح 2^ك أكبر من ن. أي أننا نتحقق من القيم 2^0, 2^1, 2^2, وهكذا حتى نجد الحق ك.
كيف يمكننا معرفة أصغر عدد صحيح ك عند أي 2^ك يتجاوز عددا طبيعيا معينا ن?
من أجل العثور على أصغر عدد صحيح ك ، حيث سيتجاوز 2^ك الرقم ن ، يمكنك استخدام اللوغاريتمات. تحتاج إلى العثور على قيمة اللوغاريتم على أساس 2 من الرقم ن ، تقريبه وإضافة 1. ستكون القيمة الناتجة عن ك هي الأصغر عند 2^ك > ن.
كيف يمكننا استخدام البرمجة بيثون للعثور على أصغر ك فيها 2^ك أكبر من عدد معين ن?
في بايثون ، يمكنك كتابة حلقة بسيطة تزيد من قيمة المتغير ك بالتتابع وتتحقق مما إذا كان 2^ك يصبح أكبر من الرقم ن. بمجرد استيفاء هذا الشرط ، يمكن مقاطعة الدورة ، وستكون قيمة ك هي القيمة المطلوبة.
هل من الممكن العثور على أصغر ك الذي 2^ك يصبح أكبر من عدد معين ن, دون استخدام دورات أو اللوغاريتمات?
نعم ، من الممكن العثور على أصغر ك دون استخدام دورات أو لوغاريتمات. إذا كان الرقم ن تم تعيينه مبدئيا كقوة لاثنين (على سبيل المثال ، 8 ، 16 ، 32 ، إلخ.) ، ثم قيمة ك ستكون مساوية للقوة التي يجب رفع 2 إليها للحصول على الرقم ن. في حالات أخرى ، يمكنك استخدام عمليات البت للعثور بسرعة على أصغر ك.