یک تابع یا کلاس پایتون بنویسید که با استفاده از صف (queue) میانگین متحرک (moving average) با طول پنجره ثابت را روی یک جریان داده‌های عددی محاسبه و برای هر ورودی یک مقدار میانگین برگرداند.

1.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:24

0.0

برای حل از ساختار صف مانند collections.deque استفاده کنید تا درج و حذف در دو سر در زمان O(1) انجام شود؛ برای بهینه‌سازی، به‌جای محاسبه مجدد مجموع پنجره در هر بار، مجموع جاری را نگه‌داشته و هنگام اضافه یا حذف عنصر آن را به‌روزرسانی کنید. در پایتون از ماژول استاندارد collections و نوع deque (یا queue.Queue در صورت نیاز به هماهنگ‌سازی بین‌ریسمانی) استفاده کنید؛ همچنین هنگام آغاز (وقتی عناصر کمتر از اندازه پنجره‌اند) میانگین را بر اساس تعداد موجود محاسبه کنید. این روش برای کاربردهای محاسبات علمی و پردازش جریان داده در محیط‌های HPC مناسب و از نظر زمان و حافظه کارا است.

توسط پژوهشگر در 221 روز قبل ساعت 01:24
دسته بندی ها: Python Python for beginner
sara در 221 روز قبل ساعت 13:23

برای پیاده‌سازی میانگین متحرک با پنجره ثابت، نگه‌داشتن مجموع جاری (current_sum) و به‌روزرسانی آن با هر اضافه/حذف عنصر کلیدی است تا از محاسبه دوباره پنجره جلوگیری شود. هنگام آغاز جریان و زمانی که تعداد عناصر کمتر از طول پنجره است، میانگین را بر اساس تعداد عناصر موجود تقسیم کنید تا نتیجه صحیح باشد. استفاده از collections.deque برای پشت‌سرهمی با پیچیدگی O(1) در هر عملیات ورود/خروج ایده‌آل است و می‌تواند حافظه را بهینه نگه دارد. اگر در محیط‌های چندریسمانی کار می‌کنید، حتماً در دسترسی به deque یا به‌روزرسانی مجموع از قفل‌ها یا ساختارهای همگام‌سازی استفاده کنید تا از شرایط رقابتی جلوگیری شود.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری