با استفاده از ماژول bisect در پایتون، تابعی بنویسید که مقادیر اعشاری خروجی از یک شبیه‌سازی را به‌صورت پیوسته در یک لیست مرتب درج کند و پس از هر درج، میانه (median) فعلی را بازگرداند.

5.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 02:12

0.0

برای حل، یک لیست مرتب نگه دارید و از bisect.insort یا ترکیب bisect.bisect_left و insert برای پیدا کردن موقعیت درج استفاده کنید تا مقدار جدید در جای درست قرار گیرد؛ سپس با توجه به طول لیست میانه را محاسبه کنید (اگر طول فرد باشد عنصر میانی و اگر زوج باشد میانگین دو عنصر میانی). نکات: bisect جستجو را در O(log n) انجام می‌دهد اما درج در لیست O(n) جابه‌جایی دارد، بنابراین برای داده‌های خیلی بزرگ یا پردازش با کارایی بالا می‌توانید به ساختارهایی مثل دو heap (با heapq)، بسته‌های SortedContainers یا آرایه‌های numpy برای پردازش برداری فکر کنید.

توسط پژوهشگر در 220 روز قبل ساعت 02:12
دسته بندی ها: Python Python for beginner
sara در 220 روز قبل ساعت 10:33

به‌کارگیری bisect.insort برای نگه‌داشتن لیست مرتب و بازگرداندن میانه پس از هر درج ایده‌ای خوب است. با این وجود، عملیات درج در لیست مرتب O(n) است و برای داده‌های بزرگ کارایی مطلوبی ندارد؛ می‌توانید از دو heap یا بسته‌های SortedContainers استفاده کنید تا هم جستجو و هم درج را کارآمدتر کنید. برای محاسبه میانه در هر گام، اگر طول لیست فرد است عنصر میانی را و اگر زوج است میانگین دو عنصر میانی را بازگردانید. در نهایت اگر داده‌ها زیاد یا با سرعت بالا وارد می‌شوند، گزینه‌هایی مانند NumPy یا سایر ساختارهای مخصوص پردازش برداری را مدنظر قرار دهید.

گزارش

1 پاسخ

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

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