كل فئة من فئات التركيب ترسم خطًا مائلًا
رسم التكلفة ضد حجم المدخلات
ضع حجم المدخلات N على المحور الأفقي. وضع التكلفة (العمليات، الزمن) على المحور الرأسي. كل فئة من فئات التركيب تنتج خطًا مائلًا مختلفًا. يمكنك التعرف على معدل نمو الالغوريثم من شكل خط أداءه.
O(1) — خط أفقي مستوٍ. تبلغ الدالة f(N) = 1. لا يوجد ميل. لا تتغير التكلفة أبدًا بغض النظر عن N. بحث الجدول الهاش: بغض النظر عن عدد العناصر في الجدول، ينتشر القفز إلى القطعة الصحيحة بمقدار واحد عملية حاسبة.
O(log N) — خط مائل طفيف، ميل يقلص. عند N = 1,000,000: التكلفة ≈ 20 عملية. الخط يرتفع بشكل حاد عند N الصغير، ثم يتلاشى. كل ضعف لـ N يضيف وحدة تكلفة واحدة.
O(N) — خط مستقيم منقي. الميل = 1 (في المعنى اللاذى). تزداد التكلفة بنفس معدل N. إذا تكرر N ثلاث مرات، تكرر التكلفة ثلاث مرات.
O(N log N) — خط مائل أكثر حدة مع انحناء طفيف لأعلى. يقع فوق O(N) لكن دون O(N²). يضيف عامل اللوجاريثم عامل نموًا بطيئًا على الميل الخطي.
O(N²) — بيضاوية مفتوحة لأعلى. يزداد الميل مع نمو N. عند N = 10: التكلفة = 100. عند N = 100: التكلفة = 10,000. عند N = 1,000: التكلفة = 1,000,000.
الفجوة النموذجية
تزداد النسبة O(N²) / O(N) = N. تزداد الفجوة بين البيضاوية والخط المندس مع نمو N. عند N = 10: 10× فجوة. عند N = 100: 100× فجوة. عند N = 1,000: 1,000× فجوة. عند N = 50,000: 50,000× فجوة. تتساوي الفجوة بـ N — دائمًا.
حساب فجوة النمو
تحتوي شبكة الديبندنسي الكبيرة على 50,000 حزمة (N = 50,000). يجرى تشغيل إحدى الالغوريثم في O(N) الزمن. يجرى تشغيل الثاني في O(N²). عند هذا N، تتساوي النسبة O(N²)/O(N) = N = 50,000.
تقسيم قطعة من القضيب
البحث الثنائي كتقسيم مكرر
مصفوفة مرتبة من N عناصر تشكل قطعة من القضيب طولها N. البحث الثنائي يقوم بتقسيم المقطع المتبقي بشكل متكرر:
1. اشارة إلى نصف المحور المتبقي.
2. إذا كانت الهدف < نصف المحور: النصف الأيمن يختفي. التكرار على النصف الأيسر.
3. إذا كانت الهدف > نصف المحور: النصف الأيسر يختفي. التكرار على النصف الأيمن.
4. إذا كانت الهدف = نصف المحور: انتهى.
! [تقسيم البحث الثنائي](/static/diagrams/cs_algo_binary_halving.svg)
بعد k تقسيمات، يحتوي المقطع المتبقي على طول N / 2^k. ينهى البحث عندما يكون الطول ذلك يساوي 1:
N / 2^k = 1 → 2^k = N → k = log₂N
لذلك، يلزم البحث الثنائي على N عناصر في أقصى حد log₂N مقارنة.
التقسيم والضرب المزدوج: جانبين من نفس المنحني
التقسيم والضرب المزدوجا هما عكس الهندسي. منحني 2^k والمنحني اللوجستري log₂N هما انعكاس لبعض على خط y = x.
考虑折纸:一张纸开始厚度0.1毫米。每折厚度翻倍。经过42次折叠:0.1毫米×2^42≈439,804公里——超过月球(384,400公里)。二分搜索运行的倒数:开始于N个元素,每一步减少一半的数量,到达1个元素在log₂N步。
几何:二分是自相似操作。每次二分产生两个半部分,结构看起来与整体相同。递归和对数共享这种自相似性。
مقارنة وضرب مزدوج
تحتوي المصفوفة المرتبة على 1,048,576 عنصرًا. ملاحظة: 1,048,576 = 2^20.
الوظيفة الهاشية كخارطة هندسية
الوظيفة الهاشية كوظيفة
جدول الهاش يُخَطِّط مفتاح إلى حقيبة باستخدام وظيفة الهاش:
الحقيبة = الهاش (المفتاح) mod حجم الجدول
هذا وظيفة في معنى الرياضيات الصارمة: تُخَطِّط من مجال (جميع المفاتيح المحتملة) إلى نطاق (indices الحقائب من 0 إلى حجم الجدول - 1). الصورة الهندسية: المفاتيح تُشغل مساحة واحدة؛ الحقائب تُشغل مساحة أخرى. وظيفة الهاش تُشَغِّل المفاتيح على indices الحقائب.
بحث O(1) - القفز المباشر، لا بحث. تقوم وظيفة الهاش بتحديد index الحقيبة في وقت ثابت. قفز مباشرة إلى تلك الحقيبة. لا توجد رحلة، لا وجود لخيط المقارنة.
نسبة التحميل. عند نسبة التحميل 0.75، 75% من الحقائب تحتوي على عنصر واحد على الأقل. فوق ~0.9، يزداد حدوث التصادمات: يُشَغَلان مفتاحان في الحقيبة نفسها، مما يُشَكِّل سلسلة من العناصر داخل تلك الحقيبة. بحث في سلسلة طويلة يتحول إلى O(N) في الحالة الأسوأ.
جودة توزيع الخلاصات كجغرافيا
توزيع وظيفة هاش جيد ينتشر المفاتيح بشكل متساوي عبر جميع الحقائب. هندسياً: وظيفة التوزيع تغطي نطاقها جميع الأبعاد بشكل متساوي. كل حقيبة تتلقى تقريبًا N / table_size مفاتيح.
وظيفة الهاش السيئة تجمع المفاتيح في عدد قليل من الحقائب. هندسياً: تُحَصِّل نطاق الوظيفة على جزء من الأبعاد - معظم المفاتيح تُشَغَل إلى عدد قليل من النقاط. الباقي من الحقائب يظل فارغًا.
العلاقة مع MOAD-0001
استبدال قائمة باستخدام مجموعة يُحَلُّ MOAD-0001 لأنه يستخدم جدول الهاش بشكل داخلي. بحث O(N) في القائمة → بحث O(1) في جدول الهاش. هندسياً: السفر الخطي على سلسلة يتحول إلى مشروع مباشر عبر وظيفة.
تحليل وظيفة الهاش غير المنتشرة
جدول الهاش يحتوي على 1000 خزانة و 900 عنصر (نسبة التحميل 0.9). يعرض 500 من تلك العناصر إلى خزنة واحدة.