حالت آفلاین — محتوا از حافظهٔ کش نمایش داده می‌شود
آموزش الگوریتم و حل مسئله با پایتون؛ تمرین عملی

مقایسه راه‌حل خطی و درجه دوم با پایتون

تحلیل الگوریتم در پایتون؛ از قرارداد تا شمارش عملیات · 0٪

✍️ برای مقایسه دو راه‌حل لازم نیست همیشه زمان بگیریم. اول مشخص کن چه کاری را می‌شماری؛ بعد اندازه ورودی را تغییر بده. راه‌حل الف هر عضو را یک بار بررسی می‌کند. راه‌حل ب هر زوج متفاوت از اعضا را یک بار بررسی می‌کند. برای پنج عضو، الف پنج بررسی و ب ده بررسی دارد؛ با ده عضو این عددها ده و چهل‌وپنج می‌شوند.

اینجا قرار نیست از زمان اجرا نتیجه قطعی بگیریم یا یک کار متفاوت را به اسم همان مسئله مقایسه کنیم. فقط مدل هزینه دو مسیر فرضی را کنار هم می‌گذاریم تا رشد کار را ببینیم. در اندازه‌های خیلی کوچک ممکن است تعداد زوج‌ها کمتر از تعداد اعضا باشد؛ مثلاً برای یک عضو، بررسی زوجی اصلاً انجام نمی‌شود.

تابع خودت را از صفر بساز و دو شمارش را به همان ترتیب قرارداد برگردون. می‌تونی با حلقه یا رابطه عددی حساب کنی؛ نتیجه باید مستقل از ساعت و دستگاه باشد. خطای رایج اینه که برای مدل زوجی n*n بنویسیم؛ آن عبارت زوج‌های خودی و هر دو جهت را می‌شمارد، در حالی که تعریف این تمرین فقط i < j است.

تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا می‌زند و حفظ ورودی را بررسی می‌کند. آن را تغییر نده؛ پاسخ تو همان تابع خواسته‌شده است.

فعالیت شما

تابع compare_work(n) عدد صحیح نامنفی n را می‌گیرد و فهرست [linear, pairs] را برمی‌گرداند: linear برابر n و pairs تعداد زوج‌های i < j میان n عضو است. n=0 خروجی [0,0] و n=1 خروجی [1,0] دارد؛ compare_work(4) برابر [4,6] است. ورودی منفی در قرارداد نیست. تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا می‌زند و حفظ ورودی را بررسی می‌کند. آن را تغییر نده؛ پاسخ تو همان تابع خواسته‌شده است.

مطالعهٔ این گام برای همه آزاد است

برای پاسخ‌دادن، بررسی پاسخ، ثبت پیشرفت و استفاده از دستیار باید شرایط شرکت در فعالیت‌ها را داشته باشید.

برای انجام فعالیت وارد شوید

برای انجام فعالیت‌ها ابتدا این دوره‌های پیش‌نیاز را تکمیل کنید:

کد اولیهٔ فعالیت

def compare_work(n):
    # TODO: return the two operation counts
    pass

# این تابع آماده فقط برای ارزیابی است؛ آن را تغییر نده.
def course_check(*args):
    from copy import deepcopy
    before = deepcopy(args)
    result = compare_work(*args)
    if args != before:
        raise ValueError('ورودی نباید تغییر کند.')
    return result