ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
فخاریان
تمرین چهارم
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
مسئله -1
روش درهمسازی
میخواهیم که تابع درهمسازی مناسبی برای صد کلید تعریف کنیم .صد کلیدِ داده شده ،همگی از الگویِ Ki = i2+iبرای
i = 1,2,…,100پیروی میکنند .برای درهمسازی از جدولی با اندازهی m=8استفاده میکنیم.
ن جستوجوی موفق چقدر خواهد بود؟ زمانِ حذف در
الف -اگر از روش زنجیرهای استفاده کنیم ،میانگین زما ِ
بدترین حالت چقدر میشود؟
ت ( h(k) = k mod mروش تقسیم) تعریف کنیم ،برخوردها چگونه توزیع خواهد
ب -اگر تابع درهمسازی را به صور ِ
شد؟ با قسمت قبل مقایسه کنید.
ن برخوردها چه تابعِ درهمسازیِ دیگری پیشنهاد میکنید؟ پیشنهاد خود
ع مشکلِ پراکندگیِ نامتواز ِ
ج -برای رف ِ
را برای K8 = 72نشان دهید.
مسئله -2
جدولِ درهمسازی
ی باز با وارسی خطی ،تابع درهمسازی برای جدولی به اندازهی هشت به صورت زیر است:
در روش درهمساز ِ
A B C D E F G H
1
4
5
4
4
2
6
2
Key
hash
اگر جدول درهمسازی در ابتدا تهی باشد ،به چند حالت میتوان این عناصر را در جدول درج کرد تا در نهایت ،جدول زیر
تولید شود:
0 1 2 3 4 5 6 7
G H A C D E B F
مسئله -3
مرتبسازی خطی
الگوریتمی ارائه دهید که nعدد صحیح از صفر تا n2-1را در ) O(nمرتب کند.
i
)T(i
مسئله -4
مرتبسازی پیچ و مهره
nعدد پیچ و nعدد مهره ،هرکدام با اندازههای متمایز داده شده است .میدانیم که دقیقا یک عدد از پیچها به یک عدد از
مهرهها میخورد و بنابراین یک تناظر بینِ هر پیچ با مهرهی هماندازهاش وجود دارد .تنها کار مجاز ،انتخاب یک عدد پیچ
و یک عدد مهره و آزمون این دو با هم است تا مشخص شود که که آیا به هم میخورند و یا اینکه کدام یک از دیگری
کوچکتر است.
الگوریتمی ارائه دهید که در ) O(nlgnآزمون ،پیچها و مهرههای متناظر را بیابد.
مسئله -5
مرتبسازیِ کمینه
الف -الگوریتمی ارائه کنید که با دریافت یک دنبالهی nعضوی ،بزرگترین زیردنبالهی صعودیِ پیوسته را در )O(n
پیدا کند.
ب -با استفاده از الگوریتمِ خود در قسمت قبل ،یک دنباله از اعداد را با کمترین تعدا ِد حرکت مرتب کنید .در هر
ی دیگر دنباله قرار دهید.
مرحله تنها میتوانید یک عدد را انتخاب و در جا ِ
مسئله -6
مرتبسازی خاص
آرایهی nتایی Aبا اعداد متمایز 1تا nپر شده است .الگوریتم زیر برای مرتبکردن آرایه پیشنهاد شده است:
{)void Mysort(int A[], int n
; int t, i
)for (i=1; i<=n; i++
{)while (A[i] != i
; ]t = A[i
; ]]A[i] = A[A[i
; A[t] = t
}
}
الف -برای اثباتِ درست بودن یک الگوریت ِم مرتبسازی ،چه گزارههایی را باید اثبات کرد؟
ب -نشان دهید این الگوریتم درست کار میکند.
ج -زمان اجرای این الگوریتم را تحلیل کنید.
© Copyright 2025 Paperzz