الگوریتم زیر را در نظر بگیرید. در این الگوریتم $n$ یک عدد طبیعی و $A$ یک آرایه است که عنصر $i$ام آن را با $A[i]$ نشان میدهیم.
کدام یک از گزارههای زیر در مورد مقدار آرایهی $A$ پس از اجرای این الگوریتم٬ درست است؟
پاسخ
گزینه (۲) درست است.
به ازای $j=1,2,...,16$ خواهیم داشت:
$A(1)=0 \quad\quad\quad\quad\quad\quad\quad\quad A(2)=1 \quad\quad\quad\quad\quad\quad\quad\quad A(3)=3 \\ A(4)=2 \quad\quad\quad\quad\quad\quad\quad\quad A(5)=6 \quad\quad\quad\quad\quad\quad\quad\quad A(6)=7 \\ A(7)=5 \quad\quad\quad\quad\quad\quad\quad\quad A(8)=4 \quad\quad\quad\quad\quad\quad\quad\quad A(9)=12 \\ A(10)=13 \quad\quad\quad\quad\quad\quad\quad A(11)=15 \quad\quad\quad\quad\quad\quad\quad A(12)=14 \\ A(13)=10 \quad\quad\quad\quad\quad\quad\quad A(14)=11 \quad\quad\quad\quad\quad\quad\quad\quad A(15)=9 \\ A(16)=8$
غلط بودن گزینههای ۴٬۱ و ۵ واضح است. برای به دست آوردن $A(2^n+1)$ تا $A(2^{n+1})$ باید مقادیر $A(2^n)$ تا $A(1)$ را (نه به ترتیب) با مقدار ثابت $2^n$ جمع کرد. پس اگر $A(2^n)$ تا $A(1)$ عضو تکراری نداشته باشد به استقرا معلوم میشود که $A(2^n+1)$ تا $A(2^{n+1})$ نیز عضو تکراری نخواهد داشت٬ ضمن اینکه به عنوان مثال از $A(1)$ تا $A(8)$ عضو تکراری وجود ندارد(پایهی استقرا). پس گزینهی ۳ نیز غلط میباشد.
و اما گزینهی ۲ صحیح است. استدلال٬ مشابه استدلال فوق است چون هر دو عدد متوالی از $A(1)$ تا $A(8)$ در مبنای ۲ دقیقا در یک رقم متفاوت هستند پس اگر آنان را با $2^3$ (در مبنای ۲ به صورت ۱۰۰۰) جمع کنیم فقط رقم آخر از سمت چپ آنان از صفر به ۱ تغییر خواهند یافت…