با استفاده از itertools.permutations در پایتون، برنامهای بنویسید که همهٔ ترتیبهای ممکن عناصر یک لیست عددی را تولید کرده و ترتیبی را که مجموع قدرمطلق اختلافهای میان عناصر متوالی را کمینه میکند پیدا و آن ترتیب و مقدار مجموع را چاپ کند.
2.0 بازدید آخرین ویرایش در 202 روز قبل ساعت 02:59 0.0
برای حل این مسئله از itertools.permutations برای تولید تمام جایگشتها استفاده کنید، سپس برای هر جایگشت مجموع قدرمطلق اختلافهای متوالی را با یک عبارت جمعی (مثلاً sum(abs(a[i]-a[i+1]) for i in range(len(a)-1))) محاسبه کنید و کمینه را نگه دارید. نکات: برای لیستهای بزرگ پیچیدگی عاملیلی میشود (n!)، پس این روش مناسب n کوچک تا متوسط است؛ برای ورودیهای بزرگ میتوانید از روشهای تقریبی یا الگوریتمهای حریصانه استفاده کنید. از امکانات استاندارد پایتون (itertools، توابع جمع و لیست کامپرهنشن) استفاده کنید و در صورت نیاز برای محاسبات عددی از numpy بهره ببرید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای یافتن ترتیب با کمترین مجموع قدرمطلق اختلافهای متوالی از تابع min با کلید استفاده کنید تا بدون نگهداری کل لیست جایگشتها به نتیجه برسید. همچنین میتوانید مقدار کمینه را پس از به دست آوردن بهترین ترتیب محاسبه و چاپ کنید. این روش دارای پیچیدگی فاکتوریال است و برای n بزرگ مناسب نیست، بنابراین برای ورودیهای بزرگتر بهتر است از روشهای تقریبی یا الگوریتمهای حریصانه بهره ببرید. استفاده از مولدهای itertools.permutations به صرفه بودن حافظه کمک میکند و برای محاسبات عددی میتوانید از numpy بهره ببرید.
گزارش