عدد حاويات جدول التجزئة
لتخزين 1000 مفتاح بمعامل تحميل 0.75 تحتاج إلى 1334 حاوية على الأقل، ويُقرَّب ذلك إلى 2048 بوصفها قوة للعدد اثنين. وترى أيضًا الحمل الفعلي وعدد المفاتيح التي تتسع لها الحاويات والهامش المتبقي. مجاني في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
مثال محلول
- العناصر
- 1,000
- عامل الحمل
- 0.75
- التقريب
- Power of two
- الحد الأدنى للسلال
- 1,334
- السلال
- 2,048
- عامل الحمل الفعلي
- 0.48828125
- السعة
- 1,536
لا يكون جدول التجزئة سريعًا إلا إذا كان المصفوفة التي وراءه مقدَّرة الحجم تقديرًا حسنًا. إذا خزّنتم n مفاتيح في m حاويات، فإن معامل التحميل α = n / m يقرر طول السلاسل، ومتى يتجمّع العنونة المفتوحة، وكم مرة ينطلق إعادة التحجيم. إن اخترتم m صغيرًا جدًا سارت كل عملية بحث في كومة تصادمات. وإن اخترتم m كبيرًا جدًا دفعتم ذاكرة RAM مقابل فتحات فارغة لا تعين زمن الاستجابة. تأخذ حاسبة عدد حاويات جدول التجزئة عدد العناصر المتوقع، ومعامل تحميل مستهدفًا مثل القيمة الافتراضية 0.75 في Java HashMap، واستراتيجية تقريب، ثم تعيد أصغر جدول يمكن تخصيصه يُبقي الإشغال عند ذلك الهدف أو دونه. تحسب أولًا السقف الخام ceil(n / α) ثم تقرّب ذلك الأرضية إلى قوة الاثنين التالية أو العدد الأولي التالي — وهما الحجمان اللذان تخصّصهما خرائط الإنتاج فعلًا. تناسب أحجام قوة الاثنين الخرائط القائمة على القناع التي تفهرس بعملية AND البتّية للتجزئة و(m ناقص واحد). وتناسب الأحجام الأولية الخرائط القائمة على الباقي التي تفهرس بـ hash mod m.
لماذا يجب أن يختار معامل التحميل عدد الحاويات لا تخمين مستدير
معامل التحميل هو رقم الإشغال الوحيد الذي يعبر بين اللغات. تبلغ قيمة Java HashMap الافتراضية 0.75 وتعيد التحجيم عندما يتجاوز الحجم السعة مضروبة في ذلك المعامل. ويقف Rust hashbrown وكثير من منافذ Swiss-table قرب 0.875 قبل أن تنمو.
وكثيرًا ما يصوّب الرمز التعليمي الكلاسيكي ذو السلاسل المنفصلة إلى 0.5 أو 1.0. وفي كل حال تكون هوية التخطيط واحدة: تحتاجون إلى ceil(n / α) موضعًا على الأقل إذا وجب أن تبقى n مفاتيح عند الهدف α أو دونه. وذلك السقف الخام قلّما يكون العدد الذي تخصّصونه.
تشترط التنفيذات القائمة على القناع أن يكون m قوة اثنين حتى يكون الفهرس عملية AND بتّية واحدة، ولذلك تصير 1 000 مفتاح عند 0.75 إلى 2 048 حاوية لا 1 334. وتفضّل التنفيذات القائمة على الباقي عددًا أوليًا حتى يتوزع تجزئة ضعيف على أصناف الباقي، ولذلك تصير المفاتيح الألف ذاتها إلى الأولي التالي عند 1 334 أو فوقه. استعملوا هذه الأرقام الخمسة معًا.
فالجدول الذي ارتفع كثيرًا إلى قوة الاثنين التالية له حمل فعلي مريح وheadroom واسع؛ أما الذي هبط على أولي قريب فهو أضيق وأقرب إلى إعادة تحجيم. وتخمين 1 024 أو 4 096 لأن تلك الأرقام تبدو من علوم الحاسوب هو الطريق الذي تهدر به الخدمات صفحة من RAM أو تصيب إعادة تحجيم في الدقيقة الأولى من الحركة.
أين تكسب واجهة عدد الحاويات أجرها والحدود والتسعير
استخدموا أداة المتصفح عندما تختارون السعة الابتدائية لـ HashMap، أو تكتبون تعليقًا يجب أن يدافع عن كون المصفوفة 2 048 لا 1 334، أو تمرّون بمراجعة على الفرق بين جدول قناع وجدول باقٍ. امسحوا معامل التحميل حتى يغطي headroom ذروة النمو التالية ثم احتفظوا بـ m المقرَّب. وقابلوا النتيجة بحاسبة تصادمات متوقعة متى عُرف m: تجيب تلك الشقيقة عن عدد المفاتيح التي تتشارك حاوية، بينما تجيب هذه الصفحة عن عدد الحاويات التي تُخصَّص أولًا.
والبحثان تذكرتان مختلفتان ولا يجوز أن يلتهم أحدهما الآخر. والنتائج حتمية تمامًا: فالعناصر نفسها ومعامل التحميل والتقريب تنتج دائمًا المتجه نفسه، فيمكنكم تثبيت الأمثلة في الاختبارات والمواد التعليمية. لا نموذج لغوي ولا خدمة إحصاء خارجية ولا عشوائية.
حالات الاستخدام
السعة الابتدائية لـ HashMap والقاموس
أدخلوا حجم مجموعة العمل المتوقع و0.75 (أو القيمة الافتراضية لبيئة التشغيل) لتحصلوا على مصفوفة قوة الاثنين التي يجب أن تخصّصها Java وRust ومعظم الخرائط القائمة على القناع.
جداول الباقي ذات الحجم الأولي
قدّروا حجم الخرائط الكلاسيكية ذات السلاسل المنفصلة أو بأسلوب Hashtable التي تفهرس بـ hash modulo m بتقريب أرضية الإشغال إلى الأولي التالي.
مولّدات ومراجعات وأواكل CI
تستدعي مولّدات الرمز ومنصات المقابلات أوراكل تقدير حجم حتميًا يرفض عدد عناصر مفقودًا ويعيد حقل buckets نفسه للزوجين n وα نفسيهما.
الأسئلة الشائعة
هل يُقرَّب عدد الحاويات إلى قوة اثنين أم إلى عدد أولي؟
واستخدموا prime للخرائط القائمة على الباقي مثل Hashtable الكلاسيكي في Java، حتى يتوزع تجزئة ضعيف على أصناف الباقي.
ما معامل التحميل الذي ينبغي اختياره؟
يتوقف ذلك على الجدول الذي ستستخدمه. فجدول HashMap في Java يستخدم 0.75 افتراضيًا، وكثير من التصاميم الحديثة مثل hashbrown في Rust تقارب 0.875، وكثيرًا ما تستهدف الشيفرات التعليمية 0.5 أو 1.0.
ما معنى السعة والهامش؟
السعة هي عدد المفاتيح التي يتسع لها الجدول بعد التقريب قبل تجاوز الحمل المستهدف، والهامش هو السعة ناقص مفاتيحك. ومع 1000 مفتاح بمعامل 0.75 في 2048 حاوية تكون السعة 1536 والهامش 536.
ما القيم التي يمكنني إدخالها؟
من مفتاح واحد إلى مليار مفتاح، ومعامل تحميل من 0.05 إلى 1. وتُرفض القيم الأقل من 0.05 لأنها تصف مصفوفة شبه فارغة لا جدولًا يعمل فعلًا.
لماذا يأتي الحمل الفعلي أقل من هدفي؟
لأن عدد الحاويات يُقرَّب للأعلى إلى حجم تخصصه الجداول فعلًا. فالانتقال من 1334 إلى 2048 يترك حملًا فعليًا قدره 0.48828125، أي أقل بكثير من 0.75، ويؤخر إعادة التحجيم التالية.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/dev/hash-table-capacity \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"items":1000,"load_factor":0.75}'const res = await fetch("https://api.kit.forhosting.com/dev/hash-table-capacity", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"items": 1000,
"load_factor": 0.75
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/hash-table-capacity",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"items": 1000,
"load_factor": 0.75
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/hash-table-capacity", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"items":1000,"load_factor":0.75}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"items":1000,"load_factor":0.75}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/hash-table-capacity", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"items": 1000,
"load_factor": 0.75
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.hash_table_capacity",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
max_items | 1000000000 |
min_load_factor | 0.05 |
max_load_factor | 1 |
max_buckets | 34359738368 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
وتغذي الحسابات الحتمية ذاتها أداة المتصفح المجانية ومسار API، فلا يختلف دفتر تقدير الحجم عن فحص ما قبل الإنتاج أبدًا على مقدار كبر مصفوفة الحاويات.
لماذا يجب أن يختار معامل التحميل عدد الحاويات لا تخمين مستدير
تجعل هذه الحاسبة ذلك القرار ذا الخطوتين صريحًا: تُبلِغ عن min_buckets (أرضية الإشغال)، وbuckets (التخصيص المقرَّب)، وactual_load_factor (n / m، دائمًا عند الهدف أو دونه بعد التقريب)، وcapacity (كم مفتاحًا يتسع قبل تجاوز الهدف)، وheadroom (capacity ناقص n).
عقد الإدخال وأنماط التقريب والصيغ وسلوك الخطأ
و0.75 هو المثال والقيمة الافتراضية في Java؛ و1.0 جدول ممتلئ؛ وتُرفض القيم دون 0.05 لأنها تصف مصفوفة شبه فارغة لا خريطة عمل. وتُوجد قوى الاثنين بالمضاعفة لا بحيل 32 بت، فتبقى الأحجام فوق اثنين مرفوعًا إلى واحد وثلاثين أعدادًا صحيحة آمنة دقيقة. وتُوجد الأعداد الأولية بالقسمة التجريبية على المرشحين الفرديين. أرسلوا بجسم JSON عبر POST حقلين إلزاميين وواحدًا اختياريًا. items هو عدد المفاتيح المتوقع، عدد صحيح من واحد إلى مليار؛ وتُقبل الأسماء البديلة n وcount وexpected وkeys. وload_factor هو α المستهدف، عدد منتهٍ من 0.05 إلى 1 شاملًا؛ وتُقبل الأسماء البديلة load وalpha. وrounding تعداد، power_of_two أو prime، ويساوي power_of_two عند الحذف؛ وتُقبل الأسماء البديلة mode وstrategy. والمجال المنتهي ينتمي إلى التعداد حتى يرسم النموذج قائمة اختيار وترفض API التهجئات المخترعة. وبعد التحقق يحسب المحرك min_buckets = ceil(items / load_factor)، ويصحّح خطوة عشرية واحدة إن بقي الجداء دون n، ثم يضع buckets عند قوة الاثنين التالية أو الأولي التالي عند تلك الأرضية أو فوقها. ويعيد JSON تكرار items وload_factor وrounding، ثم يعيد min_buckets وbuckets وactual_load_factor وcapacity وheadroom وis_power_of_two وis_prime، وحقل bits في مسار قوة الاثنين فقط (لوغاريتم الأساس اثنين لـ m)، وسلسلة formula. ويخفق غياب items أو معامل تحميل خارج النطاق المنشور أو عدد عناصر غير صحيح أو تقريب مجهول بـ invalid_input مع تسمية الحقل ولا تُحتسب رسوم. هذا أوراكل تقدير حجم، لا عدّ تصادمات متوقعة: اقرنوه بأداة إشغال الكرات والصناديق إن احتجتم أيضًا إلى معرفة كم مفتاحًا سيتشارك فتحة بعد اختيار m.
أين تكسب واجهة عدد الحاويات أجرها والحدود والتسعير
واستخدموا API عندما يحتاج مولّد رمز أو بيئة مقابلة أو مخطِّط شظايا ذاكرة مؤقتة أو فحص تكامل مستمر إلى JSON مستقر لأزواج كثيرة (n, α) تحت عقد واحد. وكل طلب ناجح بند قابل للفوترة بسعر $0.002؛ ولا يستهلك فشل التحقق الرصيد. وتُبقي النطاقات المنشورة كل عدّ معادٍ داخل أعداد صحيحة آمنة عادية وفق IEEE-754 وتغطي كل خريطة في الذاكرة كنتّم تقدّرون حجمها يدويًا، من مثال قاعة بثمانية مفاتيح إلى جدول تدريب على مستوى العملية بمليار مدخل. صلوا نقطة النهاية بدروس جداول التجزئة، وخلفيات مترجم تُصدر جدولًا ثابتًا، وقوالب خدمة يجب أن تختار سعة قبل أول إدراج.
أسئلة تقنية
كيف يُختار عدد حاويات جدول تجزئة من n عناصر ومعامل تحميل؟
أرسلوا items (أو n) وload_factor (مثلًا 0.75). تعيد الحاسبة min_buckets = ceil(n/α) وbuckets مقرَّبًا إلى قوة الاثنين التالية أو الأولي التالي، إضافة إلى الحمل الفعلي وcapacity وheadroom.
ما الفرق بين min_buckets وbuckets؟
min_buckets هو أرضية الإشغال ceil(items / load_factor). وbuckets تلك الأرضية مقرَّبة إلى حجم قابل للتخصيص. ولذلك يبقى actual_load_factor = items / buckets عند الهدف أو دونه.
ماذا يحدث إذا غاب items أو خرج معامل التحميل عن النطاق؟
يفشل الطلب مع invalid_input مع تسمية الحقل. يجب أن يكون items عددًا صحيحًا من 1 إلى 1 000 000 000؛ ويجب أن يكون load_factor عددًا منتهيًا من 0.05 إلى 1. ولا تُحتسب إخفاقات التحقق.
هل حاسبة عدد حاويات جدول التجزئة مجانية؟
تعمل أداة المتصفح مجانًا على جهازكم. وتستخدم استدعاءات API رصيد KIT المدفوع مقدمًا بسعر $0.002 لكل بند ناجح؛ ولا تُحتسب إخفاقات التحقق.