مبانی برنامه‌سازی Fundamentals of Programming

Slides:



Advertisements
Similar presentations
Chapter 12 Sorting and searching. This chapter discusses n Two fundamental list operations. u Sorting u Searching n Sorted lists. n Selection/bubble sort.
Advertisements

Sorting, Sets, and Selecting - Ed. 2. and 3.: Chapter 10 - Ed. 4.: Chapter 11.
Def f(n): if (n == 0): return else: print(“*”) return f(n-1) f(3)
Computer Science 112 Fundamentals of Programming II Bucket Sort: An O(N) Sort Algorithm.
More on Functions, Modules Genome 559: Introduction to Statistical and Computational Genomics Elhanan Borenstein.
Sorting 1 Devon M. Simmonds University of North Carolina, Wilmington TIME: Tuesday/Thursday 11:11:50am in 1012 & Thursday 3:30-5:10pm in Office hours:
CS223 Advanced Data Structures and Algorithms 1 Divide and Conquer Neil Tang 4/15/2010.
Computer Science 112 Fundamentals of Programming II Finding Faster Algorithms.
CS 162 Intro to Programming II Quick Sort 1. Quicksort Maybe the most commonly used algorithm Quicksort is also a divide and conquer algorithm Advantage.
Wednesday, 11/25/02, Slide #1 CS 106 Intro to CS 1 Wednesday, 11/25/02  QUESTIONS??  Today:  More on sorting. Advanced sorting algorithms.  Complexity:
Lecture 33 CSE 331 Nov 20, Homeworks Submit HW 9 by 1:10PM HW 8 solutions at the end of the lecture.
Analysis of Algorithms CS 477/677 Midterm Exam Review Instructor: George Bebis.
Selection Sort
Binary Search Trees Section Trees Trees are efficient Many algorithms can be performed on trees in O(log n) time. Searching for elements.
Ganga 3 CLIP Tutorial Jakub T. Moscicki ARDA/LHCb Ganga Tutorial, April 2005.
Programming Training Main Points: - Lists / Arrays in Python. - Fundamental algorithms on Arrays.
CS223 Advanced Data Structures and Algorithms 1 Sorting and Master Method Neil Tang 01/21/2009.
8 For-Statements © 2010 David A Watt, University of Glasgow Accelerated Programming 2 Part I: Python Programming 1.
More on Functions; Some File I/O UW CSE 190p Summer 2012.
1 Closest Pair of Points (from “Algorithm Design” by J.Kleinberg and E.Tardos) Closest pair. Given n points in the plane, find a pair with smallest Euclidean.
Xin Liu Feb 11, * Part 1 1. What value does s have, after this code is run? s = '*' s = s + s s = s + s + s (A) '**' (B) '***' (C) '****' (D) '*****'
Python Programming in Context Chapter 4. Objectives To understand Python lists To use lists as a means of storing data To use dictionaries to store associative.
Sorting Algorithms Chris Graves February 20,
Example { 1 – –1} Use Bubble Sort (sort in increasing order} After first pass { –1 50} After Second Pass { } After.
Question : How many different ways are there to climb a staircase with n steps (for example, 100 steps) if you are allowed to skip steps, but not more.
Lecture 10 – Algorithm Analysis.  Next number is sum of previous two numbers  1, 1, 2, 3, 5, 8, 13, 21 …  Mathematical definition 2COMPSCI Computer.
Selection Sort
Lecture 15 – more on lists and for…in loops, the split() function COMPSCI 1 1 Principles of Programming.
Computer Science 112 Fundamentals of Programming II Searching, Sorting, and Complexity Analysis.
Sorting 1 Devon M. Simmonds University of North Carolina, Wilmington TIME: Tuesday/Thursday 11:11:50am in 1012 & Thursday 3:30-5:10pm in Office hours:
1 Ch.19 Divide and Conquer. 2 BIRD’S-EYE VIEW Divide and conquer algorithms Decompose a problem instance into several smaller independent instances May.
Convex Hull 2012/10/23. Convex vs. Concave A polygon P is convex if for every pair of points x and y in P, the line xy is also in P; otherwise, it is.
Introduction to Computing Using Python Repetition: the for loop  Execution control structures  for loop – iterating over a sequence  range() function.
Sorting: why?  We do it A LOT!  Makes finding the largest and smallest value easier  Makes finding how many of a certain value are in a list easier.
1 Overview Divide and Conquer Merge Sort Quick Sort.
CMPT 120 Topic: Searching – Part 2 and Intro to Time Complexity (Algorithm Analysis)
Merge Sort.
Chapter 4.
Fundamentals of Programming II Bucket Sort: An O(N) Sort Algorithm
Computer Science 112 Fundamentals of Programming II
CSc 110, Autumn 2017 Lecture 37: searching and sorting
Searching and Sorting.
Repetition: the for loop
Main Points: - More Fundamental Algorithms on Arrays.
Adapted from slides by Marty Stepp and Stuart Reges
Previously Searching Linear (Sequential): O(n) Binary: O(log n)
Merge Sort Merge sort is a recursive algorithm for sorting that decomposes the large problem.
Adapted from slides by Marty Stepp and Stuart Reges
Chapter 2: Getting Started
Adapted from slides by Marty Stepp and Stuart Reges
More Loop Examples Functions and Parameters
مرتب سازي سريع Quicksort
Merge sort merge sort: Repeatedly divides the data in half, sorts each half, and combines the sorted halves into a sorted whole. The algorithm: Divide.
CS 220: Discrete Structures and their Applications
CSc 110, Spring 2017 Lecture 39: searching and sorting
Sorting.
Adapted from slides by Marty Stepp and Stuart Reges
Programming Training Main Points:
Linear Search Binary Search Tree
Algorithms Lecture #07 Dr.Sohail Aslam.
Divide and Conquer Neil Tang 4/24/2008
CSC 380: Design and Analysis of Algorithms
Sorting and Divide-and-Conquer
Searching and Sorting (2)
Selection Sort Fonte: Fondamenti di Informatica - A.Accattatis Selection Sort Fonte:
More 2D Array and Loop Examples Functions and Parameters
2D Array, Nested Loops.
RANDOM NUMBERS SET # 1:
More on Functions, Modules
Divide 9 × by 3 ×
Presentation transcript:

مبانی برنامه‌سازی Fundamentals of Programming به‌نام خالق خِرد مبانی برنامه‌سازی Fundamentals of Programming مدرس: بی‌نظیر بیگلری جلسه 16: الگوریتم‌های مرتب‌سازی مبانی برنامه‌سازی - دانشگاه صنعتی شریف ترم پاییز سال 1392-1393

عناوین تعاریف آشنایی با پیچیدگی الگوریتم‌ها مرتب‌سازی حبابی مرتب‌سازی انتخابی روش تقسیم و حل: مرتب‌سازی ادغامی (فصل 14 کتاب اصلی) مبانی برنامه‌سازی - دانشگاه صنعتی شریف جلسه 15 ترم پاییز سال 1392-1393

مرتب‌سازی مرتب‌سازی (sorting) فرایندی است که اعضای یک دنباله مثل لیست را به نوعی مرتب می‌کند. به طور مثال یک لیست از کلمات می‌توانند براساس حروف الفبا یا طول کلمه مرتب شوند. الگوریتم‌های مرتب‌سازی بسیار زیادی وجود دارد. مرتب‌کردن تعداد بسیار زیاد آیتم‌ها به منابع محاسباتی زیادی نیاز دارد و در نتیجه الگوریتم‌های مخصوص به خودشان را دارند. امّا برای تعداد کمی آیتم یک روش مرتب‌سازی پیچیده نامناسب است. در مرتب‌سازی لازم است دو مقدار را با هم مقایسه کنیم و تعیین کنیم آیا اعضا مرتب هستند یا نه. تعداد کل مقایسه‌ها پیچیدگی الگوریتم را بیان می‌دارد. جای اعضا را باید بتوان عوض کرد تا در نهایت به دنباله مرتب‌شده رسید و همین تعداد جابجا کردن‌ها برای محاسبه کارایی الگوریتم مهم هستند. مبانی برنامه‌سازی - دانشگاه صنعتی شریف جلسه 15 ترم پاییز سال 1392-1393

پیچیدگی الگوریتم‌ها تحلیل الگوریتم‌ها تعیین میزان منابعی است که برای اجرای هر الگوریتم لازم است؛ منابعی مثل زمان، حافظه و ... کارآئی یا پیچیدگی هر الگوریتم را با تابعی نشان می‌دهند که تعداد مراحل لازم برای اجرای الگوریتم را برحسب طول داده ورودی، یا میزان محل‌های لازم حافظه را بر حسب طول داده ورودی نشان می‌دهد. برای انجام یک کار، الگوریتم‌های متفاوتی وجود دارد با تحلیل پیچیدگی الگوریتم‌ها می‌توان آنها را با هم مقایسه کرد. کارایی یک الگوریتم یک تابع است که با طول ورودی معین تعداد مراحل (پیچیدگی زمانی) و یا مکان‌های ذخیره سازی (پیچیدگی فضا) مشخص می‌کند. مبانی برنامه‌سازی - دانشگاه صنعتی شریف جلسه 15 ترم پاییز سال 1392-1393

محاسبه پیچیدگی از آنجایی که تعداد دستورات اجرا شده بیانگر پیچیدگی الگوریتم‌هاست باید تعداد دستورات اجرا شده را محاسبه کرد. در کد روبه‌رو حجم اصلی اجرا به حلقه برمی‌گردد. اگر دستور اصلی را افزایش a در حلقه بدانیم پیچیدگی الگوریتم روبه‌رو به اصطلاح از مرتبه n است. اگر دستور اصلی را افزایش a در حلقه بدانیم پیچیدگی الگوریتم روبه‌رو به اصطلاح از مرتبه 𝑛 2 است. n = int(input()) a = 0 for i in range(n): a += 1 n = int(input()) a = 0 for i in range(n): for j in range(n): a += 1 مبانی برنامه‌سازی - دانشگاه صنعتی شریف جلسه 15 ترم پاییز سال 1392-1393

مرتب‌سازی حبابی مرتب‌سازی حبابی (Bubble Sort) چندین بار یک لیست را پیمایش می‌کند؛ آیتم‌های مجاور را مقایسه کرده و آنهایی را که به ترتیب نیستند جابجا می‌کند. در هر دور، بزرگترین در بین عناصر باقیمانده را در جای درست قرار می‌دهد پس در حقیقت ابتدا بزرگترین عنصر اگر مرتب کردن به صورت صعودی باشد جای خودش را پیدا می‌کند یعنی هر حبابی که بالا بالا می‌آید در جای مربوط به خودش قرار می‌گیرد. مبانی برنامه‌سازی - دانشگاه صنعتی شریف جلسه 15 ترم پاییز سال 1392-1393

مرتب‌سازی حبابی (ادامه) در مرحله اول در لیست n عضو و n-1 جفت عضو وجود دارد که باید با هم مقایسه شوند. در دور اول وقتی به بزرگترین عنصر می‌رسد آن را با بقیه عناصر مقایسه کرده و در طول لیست جلو می‌برد تا به انتهای لیست برسد. در دور دوم بزرگترین عنصر در بین بقیه عناصر به جای خودش برده می‌شود پس n- 1 عضو باقی مانده و n-2 جفت مقایسه خواهیم داشت و به همین ترتیب... در کل n-1 دور باید این عملیات صورت گیرد چون کوچکترین عنصر بدون پردازش در اول لیست می‌نشیند. def bubble_sort(alist) : n = len(alist) for i in range(n – 1, 0, -1): for j in range(i): if alist[j] > alist[j+1]: alist[j], alist[j+1] = alist[j+1] , alist[j] مبانی برنامه‌سازی - دانشگاه صنعتی شریف جلسه 15 ترم پاییز سال 1392-1393

تحلیل مرتب‌سازی حبابی بدون توجه به چگونگی قرارگیری عناصر لیست با اندازه n باید n-1 دور دسته مقایسه‌ها انجام شود که در جدول زیر شماره دور و تعداد مقایسه‌ها در آن دو نوشته شده است: گفتیم که تعداد مقایسه‌ها بیانگر کارایی الگوریتم است. طبق جدول جمع اعداد از یک تا n-1 برابر با: 𝑛×(𝑛−1) 2 = 1 2 𝑛 2 − 1 2 𝑛 در بهترین حالت لیست از قبل مرتب‌شده است و هیچ جابجایی انجام نمی‌شود. در بدترین حالت تمام مقایسه‌ها به جابجایی منجر می‌شود. دور مقایسه‌ها 1 n-1 2 n-2 3 n-3 … مبانی برنامه‌سازی - دانشگاه صنعتی شریف جلسه 15 ترم پاییز سال 1392-1393

مرتب‌سازی انتخابی یک بهبود روی مرتب‌سازی حبابی این روش را به وجود آورده است که در هر دور تنها یک جابجایی انجام شود در هر دور بزرگترین مقدار از بین اقلام باقی‌مانده مشخص شده و یک راست دقیقاً در محل خودش قرار می‌گیرد. در مرتب‌سازی حبابی بعد از اتمام اولین دور بزرگترین عنصر در محل درستش می‌نشیند. این الگوریتم برای مرتب‌کردن n عنصر n-1 دور دارد. مبانی برنامه‌سازی - دانشگاه صنعتی شریف جلسه 15 ترم پاییز سال 1392-1393

مرتب‌سازی انتخابی (ادامه) در هر دور، بزرگترین عضو در بین عناصر باقیمانده انتخاب شده و بعد در جای دقیق خودش قرار می‌گیرد. همان طور که می‌بینید تعداد مقایسه‌ها نسبت به مرتب‌سازی حبابی تغییری نکرده است ولی تعداد جابجایی‌ها بسیار کاهش یافته است. def selection_sort(alist) : n = len(alist) for i in range(n – 1, 0, -1): max_pos = 0 for location in range(1, i+1): if alist[location] > alist[max_pos]: max_pos = location alist[i] , alist[max_pos] = alist[max_pos] , alist[i] مبانی برنامه‌سازی - دانشگاه صنعتی شریف جلسه 15 ترم پاییز سال 1392-1393

مرتب‌سازی ادغامی فرض کنید می‌خواهیم دو لیست مرتب‌شده را طوری با یکدیگر ادغام کنیم که نتیجه نیز یک لیست مرتب‌شده باشد. یک الگوریتم کاملاً ناکارامد این است دو لیست را به هم چسباند و بعد آن را مرتب کرد. اما این روش از مرتب‌بودن دو لیست استفاده‌ای نمی‌کند و در مورد لیست‌های بسیار بزرگ عملکرد بدی دارد. مبانی برنامه‌سازی - دانشگاه صنعتی شریف جلسه 15 ترم پاییز سال 1392-1393

مرتب‌سازی ادغامی (ادامه) مبانی برنامه‌سازی - دانشگاه صنعتی شریف جلسه 15 ترم پاییز سال 1392-1393

روش تقسیم و حل یکی از روش‌های حل مسئله، روش تقسیم و حل است (divide and conquer) که مسئله پیچیده و بزرگ را به زیرمسئله‌های کوچکتر تقسیم می‌کند و بعد از حل زیرمسئله‌ها، مسئله بزرگتر حل می‌شود. این راه‌حل در مرتب‌سازی به شکل مرتب‌سازی ادغامی نمود پیدا می‌کند که کارایی را بهبود می‌بخشد. ابتدا در مرحله تقسیم، در هر دور لیست را به دو بخش تقسیم می‌کنیم و این روند تا زمانی ادامه می‌یابد اگر زیرلیستی با یک عنصر یا بدون عنصر باشد طبق تعریف مرتب می‌شود. سپس در مرحله حل، برای ادغام دو زیر لیست اعضای آن مقایسه شده و در هر مرحله چون زیرلیست‌ها مرتب هستند از این خاصیت برای کاهش مقایسه‌ها بهره می‌بریم. مبانی برنامه‌سازی - دانشگاه صنعتی شریف جلسه 15 ترم پاییز سال 1392-1393

مرتب‌سازی ادغامی (تقسیم و حل) مبانی برنامه‌سازی - دانشگاه صنعتی شریف جلسه 15 ترم پاییز سال 1392-1393

مرتب‌سازی ادغامی (ادامه) این الگوریتم به صورت بازگشتی نوشته می‌شود: اگر تعداد عناصر لیست کوچکتر یا مساوی یک باشد: پردازش خاصی ندارد و در غیر این صورت لیست به دو بخش تقسیم می‌شود. def merg_sort(alist) : n = len(alist) m = n // 2 if n > 1 : b = merg_sort(a[:m]) c = merg_sort(a[m:]) a = merg(b, c) return alist مبانی برنامه‌سازی - دانشگاه صنعتی شریف جلسه 15 ترم پاییز سال 1392-1393

تحلیل مرتب‌سازی ادغامی برای تحلیل این الگوریتم به دو بخش مجزای آن دقت کرد: ادغام کردن و تابع مرتب‌سازی ادغامی مرتب‌سازی ادغامی همانند جستجوی دودویی هر بار لیست را نصف می‌‌کند پس log n تابع ادغام نیز هر عضو لیست را پردازش کرده و در لیست مرتب‌شده قرار می‌دهد بنابراین برای یک لیست با اندازه n نیاز به n بار عملیات خواهیم داشت. نتیجه تحلیل این است که با log n بار تقسیم کردن و برای هر قسمت نیز که کلاً n بود پس نتیجه نهایی nlogn است که نسبت به الگوریتم‌های قبلی کاراتر است ولی مصرف حافظه آن بیشتر است. مبانی برنامه‌سازی - دانشگاه صنعتی شریف جلسه 15 ترم پاییز سال 1392-1393

ادامه مطلب در جلسه بعد برنامه‌سازی شیءگرا مبانی برنامه‌سازی - دانشگاه صنعتی شریف جلسه 15 ترم پاییز سال 1392-1393