ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ فخاریان تمرین چهارم ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ مسئله -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