✍️ برای مقایسه الگوریتمها میتونیم یک کار مشخص را بشماریم؛ اینجا هر بازدید از یک عضو، یک عملیات حساب میشود. سرعت لپتاپ، اندازه پنجره مرورگر و فاصله زمانی اجرا دخالت ندارند. اگر ورودی هفت عضو داشته باشد، حلقهای که هر عضو را یک بار میبیند هفت بازدید دارد؛ اندازه عددهای داخل فهرست مهم نیست.
مثلاً برای [90, -5] مسیر شمارنده 0 → 1 → 2 است و نتیجه دو میشود. به چنین رشد متناسبی با تعداد اعضا، خطی یا O(n) میگیم. این نماد تعداد دقیق همه دستورهای پردازنده را ادعا نمیکند؛ درباره رشد کار با بزرگ شدن ورودی حرف میزند.
توی این تمرین تابع ناقص count_visits را با یک شمارنده کامل کن. هر دور فقط یک واحد اضافه کن و مقدار نهایی را برگردون. برای فهرست خالی حلقه اصلاً اجرا نمیشود، پس مقدار اولیه خودش پاسخ است. خطای رایج، جمع کردن خود عددها یا شروع شمارنده از یک است؛ هر دو برای بعضی ورودیها جواب ظاهراً قابل قبول میسازند اما قرارداد را رعایت نمیکنند.
تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا میزند و حفظ ورودی را بررسی میکند. آن را تغییر نده؛ پاسخ تو همان تابع خواستهشده است.
فعالیت شما
تابع count_visits(nums) یک فهرست از عددهای صحیح میگیرد و تعداد بازدیدهای یک پیمایش کامل، یعنی طول فهرست، را به صورت عدد صحیح برمیگرداند. هیچ تغییری در nums نده. خالی برابر 0 و تکعضوی برابر 1 است؛ count_visits([8, 2, 8]) برابر 3 است. تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا میزند و حفظ ورودی را بررسی میکند. آن را تغییر نده؛ پاسخ تو همان تابع خواستهشده است.