مرتب سازي مقايسه اي مرتب سازي خطي

Slides:



Advertisements
Similar presentations
سازگاري فرايندهاي يادگيري Consistency of Learning Processes ارائه دهنده : الهام باوفای حقیقی استاد درس : آقای دکتر شيري دانشگاه امير كبير دانشكده ‌ مهندسي.
Advertisements

دستور العمل نحوه محاسبه امتیاز مقالات ISI اعضای هیأت علمی دانشگاه صنعتی اصفهان بر اساس تعداد استنادات در پايگاه اسكاپوس شهریور ماه 1388 نفیسه دهقان.
1 آزمايشگاه سيستم های هوشمند ( Domain-specific Architecture.
Computer Programming برنامه سازی کامپيوتر1 مدل های رياضی مهندسی يعنی کاربرد علوم مختلف (رياضی، فيزيک) در حل مسائل کاربردی مدل های رياضی برای پيش بينی رفتار.
مهندسی نرم افزار مبتنی بر عامل
ارائه روشي براي شناسايي کاراکترهاي دستنويس، برپايه شبکه LVQ.
ارائه درس روباتيکز Extended Kalman Filter فريد ملازم استاد مربوطه دکتر شيري دانشگاه امير کبير – دانشکده کامپيوتر و فناوري اطلاعات.
نمايش اعداد.
نام و نام خانوادگي : فريد ملازم 1 آزمايشکاه سيستم هاي هوشمند ( موضوع ارائه Process and Deployment Design.
نمايش اعداد.
تعميم در يادگيري مبتني بر نمونه ها
Artificial Intelligent Systems Laboratory 1 الگو‌هاي فرايند (Process Patterns) فصل 2 درس مهندسي نرم‌افزار 2 دكتر احمد عبداله زاده بارفروش تهيه كننده :
نمايش اعداد علی عادلی.  مبنا ( base ): –مبناي r: ارقام محدود به [0, r-1]  دسيمال:(379) 10  باينري:( ) 2  اکتال:(372) 8  هگزادسيمال:(23D9F)
Solving problems by searching Chapter 3 Modified by Vali Derhami.
اسامي شناسه ها (Identifier names) اسامي متغيرها ، توابع ، برچسب ها (labels) وبقيه اشياء تعريف شده توسط كاربر در C ، شناسه ( identifier ) ناميده مي شود.
1 فصل دوم تبديلات. 2 فصل دوم سرفصل مطالب مقدمه ضرب بردارها دستگاه ‌ هاي مختصات دوران ‌ ها مختصات همگن دوران ‌ ها و انتقال ‌ ها تبديلات تركيبي همگن تبديل.
شرط و تصميم اصول كامپيوتر 1. 2 الگوريتم اقليدس E1: [find remainder] Divide m by n and let r be the remainder. Clearly, 0
1/19 Informed search algorithms Chapter 4 Modified by Vali Derhami.
1/27 Informed search algorithms Chapter 4 Modified by Vali Derhami.
Department of Computer Eng. & IT Amirkabir University of Technology (Tehran Polytechnic) Data Structures Lecturer: Abbas Sarraf Order.
پشته Stack ساختمان داده ها و الگوريتمها. 2 آشنايي مجموعه پويا (Dynamic Set ): مجموعه اي است كه تركيب و تعداد عناصر آن ممكن است در طول زمان اجراي برنامه.
1 فصل سوم سينماتيك مستقيم. 2 محتواي فصل   تعريف مجموعه فازي   تابع عضويت   نمايش مجموعه هاي فازي   برش آلفا   متغيرهاي زباني   ساخت مجموعه.
RC4 Stream Cipher.
اقتصاد مهندسي فصل دوم.
Cost- Effectiveness Analysis
Information Retrieval
[c.
مدارهای منطقی فصل چهارم و پنجم - مدارهاي منطقي تركيبي ماجولي
اسلاتهاي توسعه جلسه ششم.
اصول روان سنجی و روان آزمویی
ساختمان داده ها و الگوريتمها
ساختمان داده ها و الگوريتم ها
آرايه ها و ساختارها.
آرايه ها.
ANOVA: Analysis Of Variance
ANOVA: Analysis Of Variance
روش حریصانه در طراحی الگوریتم
وحید حقيقت دوست دانشکده فنی و مهندسی دانشگاه شاهد
Quick Sort مرتب سازي سريع.
دستورات کنترل و تکرار- 2 اصول كامپيوتر 1.
لغت نامه و جدول درهم سازي Dictionaries and Hash Tables
آشنايي با برنامه نويسي به زبان C++
پردازنده هاي چند هسته اي
معرفي درس ساختمان داده ها و الگوريتمها
مباني كامپيوتر و برنامه سازي Basics of Computer and Programming
دکتر حسين بلندي/ دکتر سید مجید اسماعیل زاده / دکتر بهمن قربانی واقعی
تبدیل فوریه (Fourier Transform)
نمايش اعداد در کامپيوتر چهار عمل اصلي
Similarity transformation
نمونه برداري از آلاينده هاي هواي محيط كار
سميرا قانوني زهرا معدني
سيستمهاي اطلاعات مديريت
مدلسازي تجربي – تخمين پارامتر
هیدرولیک جریان در کانالهای باز
فيلتر كالمن معرفي : فيلتر كالمن تخمين بهينه حالت‌ها است كه براي سيستم‌هاي ديناميكي با اختلال تصادفي در سال 1960 بزاي سيستم‌هاي گسسته و در سال 1961 براي.
گروه كارشناسي ارشد مديريت فنآوري اطلاعات(واحد الكترونيكي تهران)
آشنايي با درخت هاي تصميم گيري
Test آزمون نرم افزار Mansooreh Jalalyazdi.
تحليل عملكرد يك سيستم تصويربرداري ديجيتال
آمار توصيفي ارائه: سيد عماد احمدي.
روش های تحقیق در مدیریّت
نرم افزار عملي دوره كارداني كامپيوتر دانشگاه کردستان دانشكده فني
مدلسازي تجربي – تخمين پارامتر
مثال : فلوچارتي رسم كنيد كه دو عدد از ورودي دريافت كرده بزرگترين عدد
توزیع میانگین نمونه سعید موسوی.
در اين درس مباني ساختمان داده ها و الگوريتم ها تدریس میشود.
گروه كارشناسي ارشد مديريت فنآوري اطلاعات(واحد الكترونيكي تهران)
مباني كامپيوتر و برنامه سازي Basics of Computer and Programming
مباني كامپيوتر و برنامه سازي Basics of Computer and Programming
تخمين پارامترها - ادامه
Presentation transcript:

مرتب سازي مقايسه اي مرتب سازي خطي ساختمان داده ها و الگوريتمها

مرتب سازي مقايسه اي تاكنون چندين الگوريتم مرتب سازي را بررسي كرده ايم. در همه اين الگوريتمها، اعضاي آرايه با هم مقايسه مي شوند. اين نوع الگوريتم ها را مقايسه اي مي گوييم. بهترين زمان اجراي الگوريتمهاي بررسي شده در بدترين حالت، n log n بوده است. Quicksort, Mergesort, Heapsort آيا مي توان الگوريتمي با زمان كمتر از n log n ارائه داد؟ آيا روش ديگري غير از انواع مختلف الگوريتم هاي مقايسه اي؛ براي مرتب سازي وجود دارد ؟

Decision Tree for Insertion Sort مساله مرتب سازي <a1, a2, a3 > ترتيب ممكن: <a1, a2, a3> <a1, a3, a2> <a2, a1, a3> <a2, a3, a1> <a3, a1, a2> <a3, a2, a1> a1:a2 <= > a2:a3 a1:a3 <= > <= > a1:a3 a2:a3 <a1,a2,a3> <a2,a1,a3> <= <= > > <a1,a3,a2> <a3,a1,a2> <a2,a3,a1> <a3,a2,a1> Decision Tree for Insertion Sort

برگهاي درخت Leaf Nodes/ مساله مرتب سازي 3=h=ارتفاع درخت a1:a2 <= > a2:a3 a1:a3 <= > <= > برگهاي درخت Leaf Nodes/ a1:a3 a2:a3 <a1,a2,a3> <a2,a1,a3> <= <= > > <a1,a3,a2> <a3,a1,a2> <a2,a3,a1> <a3,a2,a1> ارتفاع درخت = بيشترين تعداد مقايسه ها و بدترين حالت الگوريتم

حداقل هزينه مرتب سازي درخت تصميم يك الگوريتم مرتب سازي بايد حداقل n!‌برگ داشته باشد تا تمام حالات ممكن ترتيب nعدد را در برگيرد. بدترين حالت يك الگوريتم ، ارتفاع درخت است. درخت دوديي به ارتفاع h حداكثر 2h برگ دارد. اين تعداد برگ بايد تمام ترتيبات مختلف را پوشش دهد. 2h >= n!  h > log(n!) n! ≈ (n/e) n (قضيه استرلينگ) h > n log ( n/e)= nlogn –nloge  h = O(nlogn) كمترين زمان اجراي الگوريتمهاي مقايسه اي n log n است. اين نتيجه نا اميد کننده است ؟

Counting Sort Counting-sort(A[1..n]) //A is an integer array for i←1 to k // k = max(A[1..n]) do C[i] ←0 for j←1 to n do C[A[j]] ←C[A[j]] + 1 //C[i] = |{key = i}| for i←2 to k do C[i] ←C[i] + C[i–1] //C[i] = |{key ≤i}| for j←n downto 1 do B[C[A[j]]] ←A[j] C[A[j]] ←C[A[j]] –1

Counting Sort - Example 1 2 3 4 5 1 2 3 4 A C 1 2 3 4 5 B

Loop 1: Initialization A C for i=1 to k C[i]= 0 B 1 2 3 4 5 1 2 3 4 1 A C 1 2 3 4 5 for i=1 to k C[i]= 0 B

Loop 2: Counting … A C B for j←1 to n 3 4 5 1 2 3 4 A C 1 2 3 4 5 B for j←1 to n do C[A[j]] ←C[A[j]] + 1// C[k] = |{key = k}|

Loop 2: Counting … A C B for j←1 to n 3 4 5 1 2 3 4 A C 1 2 3 4 5 B for j←1 to n do C[A[j]] ←C[A[j]] + 1// C[k] = |{key = k}|

Loop 2: Counting … A C B for j←1 to n 3 4 5 1 2 3 4 A C 1 2 3 4 5 B for j←1 to n do C[A[j]] ←C[A[j]] + 1// C[k] = |{key = k}|

Loop 2: Counting … A C B for j←1 to n 3 4 5 1 2 3 4 A C 1 2 3 4 5 B for j←1 to n do C[A[j]] ←C[A[j]] + 1// C[k] = |{key = k}|

Loop 2: Counting … A C B for j←1 to n 3 4 5 1 2 3 4 A C 1 2 3 4 5 B for j←1 to n do C[A[j]] ←C[A[j]] + 1// C[k] = |{key = k}|

Loop 3: Cumulating… A C B C’ for j←2 to k 1 2 3 4 5 1 2 3 4 A C 1 2 3 4 5 1 2 3 4 B C’ for j←2 to k do C[j] ←C[j] + C[j -1]// C[k] = |{key <= k}|

Loop 3: Cumulating… A C B C’ for j←2 to k 1 2 3 4 5 1 2 3 4 A C 1 2 3 4 5 1 2 3 4 B C’ for j←2 to k do C[j] ←C[j] + C[j -1]// C[k] = |{key <= k}|

Loop 3: Cumulating… A C B C’ for j←2 to k 1 2 3 4 5 1 2 3 4 A C 1 2 3 4 5 1 2 3 4 5 B C’ for j←2 to k do C[j] ←C[j] + C[j -1]// C[k] = |{key <= k}|

Loop 4: Placement… A C B C’ for j←n downto 1 2 3 4 5 1 2 3 4 5 A C 1 2 3 4 5 1 2 3 4 5 B C’ for j←n downto 1 do B[C[A[j]]] ←A[j] //Place A[j] C[A[j]] ←C[A[j]] –1 // Decrement C[A[j]]

Loop 4: Placement… A C B C’ for j←n downto 1 2 3 4 5 1 2 3 4 5 A C 1 2 3 4 5 1 2 3 4 B C’ for j←n downto 1 do B[C[A[j]]] ←A[j] //Place A[j] C[A[j]] ←C[A[j]] –1 // Decrement C[A[j]]

Loop 4: Placement… A C B C’ for j←n downto 1 2 3 4 5 1 2 3 4 5 A C 1 2 3 4 5 1 2 3 4 B C’ for j←n downto 1 do B[C[A[j]]] ←A[j] //Place A[j] C[A[j]] ←C[A[j]] –1 // Decrement C[A[j]]

Loop 4: Placement… A C B C’ for j←n downto 1 2 3 4 5 1 2 3 4 5 A C 1 2 3 4 5 1 2 3 4 B C’ for j←n downto 1 do B[C[A[j]]] ←A[j] //Place A[j] C[A[j]] ←C[A[j]] –1 // Decrement C[A[j]]

Loop 4: Placement… A C B C’ for j←n downto 1 2 3 4 5 1 2 3 4 5 A C 1 2 3 4 5 1 2 3 4 B C’ for j←n downto 1 do B[C[A[j]]] ←A[j] //Place A[j] C[A[j]] ←C[A[j]] –1 // Decrement C[A[j]]

آناليز الگوريتم Loop 4:Θ(n) Loop1: Θ(k) Loop 2 :Θ(n) Loop 3: Θ(k) for i=1 to k do C[i]= 0 : Loop 2 :Θ(n) for j←1 to n do C[A[j]] ←C[A[j]] + 1// C[k] = |{key = k}| Loop 3: Θ(k) for j←2 to k do C[j] ←C[j] + C[j -1]// C[k] = |{key <= k}| Loop 4:Θ(n) for j←n downto1 do B[C[A[j]]] ←A[j] C[A[j]] ←C[A[j]] –1 Tootal: Θ(k + n)

آناليز الگوريتم if k = Θ(n)  T(Countingsort(n))= Θ(n) آيا اين نتيجه تناقضي با حداقل بدست آمده در بخش اول دارد؟ توجه كنيد: در اين الگوريتم هيچ مقايسه اي صورت نمي گيرد! نتيجه بدست آمده در بخش اول براي الگوريتم هاي مقايسه اي بود

Stable Sorting مرتب سازي پايدار 1 2 3 4 5 الگوريتم Counting Sort در صورتي كه دو عضو آرايه كليد مساوي داشته باشند، ترتيب آنها را حفظ مي كند. اين نوع الگوريتم را مرتب سازي پايدار مي نامند A 1 2 3 4 5 B

Radix Sort مرتب سازي ريشه اي Herman Hollerith در سال 1890 ، پيشنهاد كرد. اين الگوريتم، در محاسبات آماري سال 1890 آمريكا بصورت مكانيكي و الكتريكي پياده سازي و استفاده شد نتايج سرشماري دوره قبل 10 سال طول كشيده بود. با استفاده از اين ماشين، گزارشهاي آماري اوليه ظرف 6 هفته! منتشر شد اعداد را رقم به رقم و بصورت پايدار مرتب مي كند الگوريتم اوليه از پر ارزشترين رقم شروع مي كند الگوريتم بهبود يافته از پايين ترين ارزش شروع مي كند

Radix Sort Example 3 2 9 4 5 7 6 8 2 7 2 7 9 2 3 5 3 9 2 3 5 3 6 3 4 6 3 4 6 3 4 7 5 4 9 3 8 7 5 4 7 5 6 5 3 7 5 6 9 2 3 7 5 4 2 7 9 3 8 7 5 6 9 3 8

درستي Radix Sort اگر با استفاده از اين الگوريتم، دو عدد تا رقم t-1 مرتب شده باشند، با مرتب سازي آنها بر اساس رقم t : درصورتي كه رقم t دو عدد يكي باشد، خاصيت پايداري سبب حفظ ترتيب فعلي آنها مي شود. در صورتي كه اين دو رقم متفاوت باشند، ارزش بالاي رقم t ترتيب دو عدد را تعيين مي كند. 2 7 9 2 3 9 2 3 5 3 6 3 4 6 3 4 9 3 8 7 5 4 5 3 7 5 6 7 5 4 2 7 7 5 6 9 3 8

آناليز الگوريتم براي مرتب سازي n عدد دهدهي(Decimal Integer) كه ارقام آنها از 0 تا 9 متغير است، لازم است به تعداد ارقام اعداد (مثلا d) فرايند مرتب سازي تكرار شود. با استفاده از Counting Sort بعنوان الگوريتم مرتب سازي ارقام، بسادگي مي توان ديد كه فرايند مرتب سازي هزينه اي برابر Θ(d * (n +k) ) دارد كه در آن k تعداد انواع رقم است(براي اعداد دهدهي ، k=10) مي توان اين الگوريتم را طوري تغيير داد كه در هر فاز بيش از يك رقم را مورد استفاده قرار دهد

آناليز الگوريتم، ادامه اعداد در كامپيوتر بصورت باينري ذخيره مي شوند و از آنجاكه عملگرهاي مقايسه اي بيتها در سخت افزار بصورت دستورات cpu پياده شده، هوشمندانه است از ارقام دوديي براي مرتب سازي استفاده شود هنگام استفاده از اعداد باينري، معمولا بيش از 1 بيت بعنوان يك رقم استفاده مي شود. اگر اعداد 32 بيتي را با رقم 4 بيتي مرتب كنيم، 8 بار لازم است فرايند مرتب سازي رو ي ارقام مختلف اجرا شود. Counting Sort 24 يا 16 عدد مختلف را مرتب مي كند

آناليز الگوريتم - ادامه اگر n عدد مورد نظر براي مرتب سازي b بيتي باشند و از ارقام r بيتي استفاده كنيم، اين اعداد d=b/r رقم خواهند داشت. آرايه ‍C مورد استفاده در Counting Sort بايد k=2r رقم مختلف را مرتب كند. بنابراين هزينه كل الگوريتم برابر است با: T(n,b) = Θ(d * (n +k) ) = Θ((b/r)(n+2r)) بهترين انتخاب r چيست ؟

آناليز الگوريتم - ادامه T(n,b) = Θ(d * (n +k) ) = Θ((b/r)(n+2r)) با مشتق گيري و محاسبه مينيمم اين تابع r = log n بدست مي آيد. r= log n  T(n,b) = Θ((b/logn)(n+2logn))= Θ(bn/logn) اگر اعداد مورد نظر براي مرتب سازي بين 0..nd -1 باشند: b =d logn , T(n,b) = Θ(dn)

بحث و بررسي براي حجم برزرگ آرايه ها، radixsort كارايي خوبي دارد براي مرتب سازي 2000 عدد 32 بيتي، اين الگوريتم چهار بار تكرار مي شود اما، mergesort و quicksort حداقل 11 بار تكرار مي شوند(عمل تقسيم آرايه به آرايه هاي کوچکتر 11 بار صورت مي گيرد) Quicksort در هر بار تقسيم، ناحيه مراجعه به حافظه را كوچكتر مي سازد. اين ويژگي در پردازنده هاي جديد مجهز به حافظه Cache امتيازي محسوب مي شود. از اين نظر، Q.S. كه خوب طراحي شده باشد، معمولا هم ارز Radix Sort كارايي دارد

تكليف و تمرين در اينجا فرض كرديم آرايه هاي مورد نظر براي مرتب سازي، اعداد صحيح هستند؛ به نظر شما براي مرتب سازي اعداد اعشاري چگونه مي توان از اين الگوريتمها بهره گرفت؟ در كتاب، الگوريتم Bucket Sort بدين منظور معرفي شده است. اين الگوريتم را مطالعه كنيد و سعي كنيد راه حل ديگري هم براي اين مساله پيشنهاد كنيد. مسايل بخش 8 را حل كنيد