محتويات الدورة

برمجة R / التقييم والملكية والنتائج القابلة للإعادة / الدرس 16

التنميط والتخصيص وكلفة الخوارزمية

حسن موضع اختناق مقاساً مع حفظ القيم والأنواع وحدود الموارد.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • فصل نمو الخوارزمية عن صياغتها.
  • شرح التخصيص المسبق والكائنات الوسيطة.
  • تصميم قياس محدود بادعاءات دقيقة.

يحتاج سؤال الأداء عقد حمل

حدد الأبعاد والأنواع والفقد والخرج والمورد المهم قبل التحسين. قد تعمل دالة سريعاً على خمس قيم وتتعذر على مليون بسبب نمو تربيعي، وقد تهيمن كلفة ثابتة على مثال صغير دون الواقع. ابن مرجعاً صحيحاً ومدخلات ممثلة محدودة. افصل إعداد البيانات والحساب والخرج إلا إذا شملت العملية المرئية كلها. لا يثبت الاختصار أو اسم حزمة شائعة سرعة التنفيذ للحمل المطلوب.

قد يكرر النمو تخصيص الذاكرة

يقارن المثال إلحاق متجه بتخصيص حجمه النهائي ثم ملئه. يعيدان المربعات الخمسة نفسها ومجموعها، فيفحص الصواب مستقلاً عن الزمن. قد يتطلب الإلحاق تخصيصاً ونسخاً متكررين، بينما يصرح التخصيص المسبق بالحجم. تعتمد التفاصيل على حالة الكائن والتنفيذ والتحسينات. لا تحول المثال إلى نسبة زمنية عامة. قبل استبدال الحلقة افحص هل يبني التعبير المتجهي وسيطاً أكبر أو يغير الفقد أو الأسماء أو النوع.

r برنامج توضيحي بلغة R الأساسية؛ لم تتوفر بيئة R أثناء المراجعة
growing <- function(n) {
  out <- numeric(0)
  for (i in seq_len(n)) out <- c(out, i^2)
  out
}
fixed <- function(n) {
  out <- numeric(n)
  for (i in seq_len(n)) out[i] <- i^2
  out
}
cat("same=", identical(growing(5L), fixed(5L)), "\n", sep = "")
cat("sum=", sum(fixed(5L)), "\n", sep = "")
الناتج المتوقع
same=TRUE
sum=55

للتنفيذين المحدودين النتيجة العددية نفسها، ولا ندعي قياس زمن أو تخصيص.

تكشف الأعداد وسيطاً كبيراً خفياً

يحسب المثال حجم مصفوفة أزواج افتراضية دون تخصيصها. تعطي ألف مشاهدة مليون خلية وثمانية ملايين بايت حمولة مفترضة قبل الكلفة والكائنات المؤقتة. يوجد 499500 زوج غير مرتب خارج القطر. قد لا تحتاج مهمة جار أقرب أو ملخص متدفق المصفوفة كلها. قد يفوق تغيير الخوارزمية أو الاحتفاظ بالمطلوب وحده ضبط الحلقة. يجب أن تحفظ التعبئة أو الكتل أو التقريب العقد أو تصرح بتغييره.

r برنامج توضيحي بلغة R الأساسية؛ لم تتوفر بيئة R أثناء المراجعة
n <- 1000
dense_cells <- n*n
unique_pairs <- n*(n-1)/2
payload_bytes <- dense_cells*8
cat(sprintf("dense cells=%.0f; unique pairs=%.0f\n", dense_cells, unique_pairs))
cat(sprintf("assumed double payload bytes=%.0f\n", payload_bytes))
الناتج المتوقع
dense cells=1000000; unique pairs=499500
assumed double payload bytes=8000000

العدد تحليلي لمصفوفة double كثيفة افتراضية دون كلفة الكائن والوسائط، ولا تخصص مصفوفة مليون خلية.

تحتاج ملاحظة التنميط سياق تنفيذ

تقيس system.time التعبير بفئاتها الموثقة، وتسحب Rprof عينات تنفيذ للتلخيص. قد تفوت العمليات القصيرة وتختلف نسبة الزمن الكلي والذاتي. يؤثر الإحماء وجمع القمامة والحمل الخلفي وإعادة المدخل والتخصيص. كرر حملاً ممثلاً محدوداً واعرض التوزيع لا أفضل رقم. يعتمد دعم الأحداث ومعناها على المنصة والبناء؛ فاقرأ التوثيق وسجل البيئة. لا ينفذ المساق منمطاً ولا ينشر قياسات زمن R.

اقبل التحسين بسلوك مكافئ

قارن النتيجة بالمرجع وفق مساواة أو سماحية مبررة. اختبر الفراغ والعنصر المفرد والفقد والترتيب والصنف المناسب. تحسين الذاكرة الذي يحذف الهوية أو يغير المقام تحليل مختلف ولو أسرع. حدد حدود الموارد ولا تكبر القياس بلا ضابط حتى يستنفد الجلسة. إذا لم يتكرر الاختناق فاحفظ الدليل وحسن عقد القياس قبل تعديل شيفرة أخرى. تقدم البرامج توقعات حساب وبنية فقط لغياب R ومنمط تخصيصها.

الأخطاء الشائعة وإصلاحها

استنفد تعبير مختصر الذاكرة

لماذا يحدث؟
كون كائناً وسيطاً كبيراً.
كيف تصلحه؟
حلل الأبعاد واحتفظ بما تتطلبه المهمة.
كيف تتجنب تكراره؟
ضع حدوداً وقدر فئات الذروة قبل التنفيذ.

اختفى التحسن مع البيانات الفعلية

لماذا يحدث؟
لم يمثل المثال الأحجام والأنواع ونطاق العملية.
كيف تصلحه؟
قس حملاً محدوداً يطابق العقد.
كيف تتجنب تكراره؟
وثق البيئة والشكل والتكرار ونطاق الزمن.

غير الملخص المحسن القيم

لماذا يحدث؟
تغير الترتيب أو الفقد أو النوع أو الاختزال.
كيف تصلحه؟
قارنه بمرجع صحيح واسترجع العقد.
كيف تتجنب تكراره؟
افصل فحص الصحة عن الزمن.

اختبر فهمك

1. كيف يتغير عدد الخلايا الكثيفة إذا تضاعف عدد المشاهدات؟

اعرض الحل المشروح

يتغير n تربيع إلى (2n) تربيع، أي أربعة أمثال، وكذلك حمولة الثمانية بايت المفترضة. لا يشمل ذلك كلفة التنفيذ ولا يثبت ضرورة تخصيص المصفوفة؛ فقد تتجنبها خوارزمية أخرى.

2. لماذا لا نثبت عتبة مللي ثانية لمثال خمس قيم؟

اعرض الحل المشروح

تهيمن الكلفة الثابتة وتغير البيئة، ولم يقس حمل ممثل أو R هنا. افحص صواب القيم الصغيرة، وضع معيار الأداء ببيئة مدعومة ومدخل واقعي محدود وطريقة تلائم المورد الفعلي.

أهم ما تعلمته

  • حلل النمو والوسائط قبل الصياغة.
  • التخصيص المسبق اختيار بنيوي يحتاج قياساً.
  • احفظ عقد النتيجة الكامل عند التحسين.

المراجع الرسمية