(۱۲ فروردین ۱۳۹۶ ۰۴:۴۴ ب.ظ)msour44 نوشته شده توسط: سلام
با احترام به پاسخ دوستان.
به نظر دراین تست تعداد اجرای عملیات ++ (هرسه ) مد نظر طراح نیست در عنوان سوال ذکر شده "تعداد عملیات ++(هر سه) در تابع فوق" یعنی از کلمه اجرا استفاده نشده تا به گزینه ۳ برسیم.برای اطمینان بیشتر کلید سنجش را هم بررسی کردم گزینه ۱ جواب است.و به نظر این تست حذف هم نشده. انچه مسلم است طراح منظور دیگری دارد ولی نتوانسته به طور صحیح منظور خود را بیان کند شاید هم قواعد زبان c را فراموش کرده ویا اینکه در حال تحقیق بر روی الگوریتم های مولد کد بوده ولی با ذکر واژه فراخوانی تابع یک شاهکار خلق کرده.
موضوغ به اینجا ختم نمی شود همین تست با کمی تغییر در کد(بیشتر شبه کد شده ولی با همان مفهوم) با اشاره به ارشد ۹۱ بودن ان در ۶۰۰ مسئله (۱/۶۰)به این صورت پاسخ داده شده:
"در هر اجرای حلقه میانی دو عمل افزایش و در حلقه بیرونی نیز یک عمل افزایش داریم بنابراین رابطه T(n)=T(n−1)+2n+1 دزست است توجه کنید که T(0)=0 و نیز برای نمونه T(1)=3 چون یک عمل افزایش در حلقه اول یک عمل افزایش در حلقه دوم و نیز یک عنل افزایش در سطر ۴(منظورش همان افزیش count)خواهیم داشت."
به نظر در این پاسخ هم ایراد وجو دارد گقته با هر بار اجرا .... در حالی که در حلقه for یک اجرای اضافی وجود دارد که شرط نقض می شود. و در ان اجرا دیگر ++ اجرا نمی شود.یا برای T(1)=3 در شرط حلقه دوم متوقف می شویم و فقط یک بار ++ اجرا می شود پس احتمالا باید بحث اجرا را بزاریم کنار.
در کل این مدل تستهایی که صرفاً در یک ۱+ و ۱- تفاوت دارند به نظرم موش و گربه بازی هست. حداقل در این تست. اگر مثلاً تست در مورد مرتب کردن بود و یک گزینه
n⋅log(n) و گزینهی دیگه
log(n!) بود اون موقع ارزش علمی داشت ولی این سوال به نظرم مسخره هست. اگر منظور این هست که داوطلب امتحان بشه که در بار آخر حلقه اجرا نمیشود ولی عمل ++ انجام میشود، میتوان تست خیلی بهتری طرح کردو البته شک دارم این موضوع که عمل ++ بار آخر اجرا میشود ولی حلقه اجرا نمیشود اون قدر موضوع مهمی باشه که به عنوان سؤال کنکور برای داوطلبی که کل کتاب CLRS رو خونده مطرح بشه.
البته باز سرفصلها و سوالات این درس در مقابل سر فصلها و سوالاتی که به عنوان معماری کامپیوتر به خورد داوطلبان داده میشه نقش طلا رو داره.