یک تابع پایتون بنویسید که با استفاده از ماژول bisect یک لیست مرتب از اعداد شناور را به‌روزرسانی کند به‌طوری‌که مقدار جدید را در مکان مناسب درج کند و تنها k کوچک‌ترین مقادیر را نگه دارد

3.0 بازدید آخرین ویرایش در 202 روز قبل ساعت 02:35

0.0

با استفاده از ماژول bisect (مثلاً bisect.insort یا bisect.insort_left) می‌توانید مقدار جدید را به‌صورت صحیح در لیست مرتب وارد کنید و سپس اگر طول لیست از k بیشتر شد، بزرگ‌ترین عنصر (انتهای لیست اگر صعودی مرتب باشد) را حذف کنید. نکات: برای مدیریت تکراری‌ها از bisect_left یا bisect_right استفاده کنید؛ درج در لیست پیوسته O(n) است بنابراین برای مجموعه‌های بسیار بزرگ بهتر است از heapq (برای نگه‌داشتن k کوچک‌ترین‌ها) یا numpy.partition (برای محاسبات عددی سریع‌تر) استفاده کنید؛ همچنین به دقت عددی اعداد شناور در محاسبات علمی توجه کنید.

توسط پژوهشگر در 202 روز قبل ساعت 02:35
دسته بندی ها: Python Python for beginner
nima در 202 روز قبل ساعت 09:10

استفاده از bisect برای درج مقدار جدید در یک لیست مرتب شناور کار می‌کند، اما درج در لیست پیوسته با طول n زمان O(n) است. برای نگه داشتن تنها k کوچک‌ترین مقدار، بهتر است به‌جای نگه داشتن کل لیست مرتب از heapq یا ساختار حداکثر-heap استفاده کنید تا هر بار در زمان O(log k) کار شود. همچنین برای برخورد با مقادیر تکراری از bisect_left یا bisect_right بسته به نیاز استفاده کنید. و به دقت اعشار و دقت عددی در محاسبات علمی هم توجه کنید.

گزارش

1 پاسخ

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

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