Spring 2015 Lecture 1: Introduction

Slides:



Advertisements
Similar presentations
David Luebke 1 4/22/2015 CS 332: Algorithms Quicksort.
Advertisements

CS Section 600 CS Section 002 Dr. Angela Guercio Spring 2010.
Comp 122, Spring 2004 Divide and Conquer (Merge Sort)
September 12, Algorithms and Data Structures Lecture III Simonas Šaltenis Nykredit Center for Database Research Aalborg University
Chapter 2. Getting Started. Outline Familiarize you with the to think about the design and analysis of algorithms Familiarize you with the framework to.
A Basic Study on the Algorithm Analysis Chapter 2. Getting Started 한양대학교 정보보호 및 알고리즘 연구실 이재준 담당교수님 : 박희진 교수님 1.
DIVIDE AND CONQUER APPROACH. General Method Works on the approach of dividing a given problem into smaller sub problems (ideally of same size).  Divide.
2. Getting started Hsu, Lih-Hsing. Computer Theory Lab. Chapter 2P Insertion sort Example: Sorting problem Input: A sequence of n numbers Output:
Analysis of Algorithms CS 477/677 Instructor: Monica Nicolescu Lecture 5.
Spring 2015 Lecture 5: QuickSort & Selection
CS Section 600 CS Section 002 Dr. Angela Guercio Spring 2010.
CS Section 600 CS Section 002 Dr. Angela Guercio Spring 2010.
CS Section 600 CS Section 002 Dr. Angela Guercio Spring 2010.
CS 253: Algorithms Chapter 7 Mergesort Quicksort Credit: Dr. George Bebis.
Sorting. Input: A sequence of n numbers a 1, …, a n Output: A reordering a 1 ’, …, a n ’, such that a 1 ’ < … < a n ’
CS421 - Course Information Website Syllabus Schedule The Book:
Lecture 2: Divide and Conquer I: Merge-Sort and Master Theorem Shang-Hua Teng.
Algorithm Design Techniques: Induction Chapter 5 (Except Section 5.6)
1 Data Structures A program solves a problem. A program solves a problem. A solution consists of: A solution consists of:  a way to organize the data.
Quicksort CIS 606 Spring Quicksort Worst-case running time: Θ(n 2 ). Expected running time: Θ(n lg n). Constants hidden in Θ(n lg n) are small.
Algorithm Efficiency and Sorting
CS Main Questions Given that the computer is the Great Symbol Manipulator, there are three main questions in the field of computer science: What kinds.
Analysis of Algorithms CS 477/677
Introduction CIS 606 Spring The sorting problem Input: A sequence of n numbers 〈 a 1, a 2, …, a n 〉. Output: A permutation (reordering) 〈 a’ 1,
Introduction to Algorithm design and analysis
Lecture 2 MAS 714 Hartmut Klauck
Welcome to Cpt S 450 Design and Analysis of Algorithms Syllabus and Introduction.
HOW TO SOLVE IT? Algorithms. An Algorithm An algorithm is any well-defined (computational) procedure that takes some value, or set of values, as input.
Algorithm Correctness A correct algorithm is one in which every valid input instance produces the correct output. The correctness must be proved mathematically.
2IL50 Data Structures Fall 2015 Lecture 2: Analysis of Algorithms.
10/14/ Algorithms1 Algorithms - Ch2 - Sorting.
Lecture 2 Algorithm Analysis Arne Kutzner Hanyang University / Seoul Korea.
1 Designing algorithms There are many ways to design an algorithm. Insertion sort uses an incremental approach: having sorted the sub-array A[1…j - 1],
Lecture 1: Introduction and Overview CSCI 700 – Algorithms 1.
BY Lecturer: Aisha Dawood.  an algorithm is any well-defined computational procedure that takes some value, or set of values, as input and produces.
CMPT 438 Algorithms. Why Study Algorithms? Necessary in any computer programming problem ▫Improve algorithm efficiency: run faster, process more data,
A Lecture /24/2015 COSC3101A: Design and Analysis of Algorithms Tianying Ji Lecture 1.
ALGORITHMS THIRD YEAR BANHA UNIVERSITY FACULTY OF COMPUTERS AND INFORMATIC Lecture three Dr. Hamdy M. Mousa.
Getting Started Introduction to Algorithms Jeff Chastine.
1Computer Sciences Department. Book: Introduction to Algorithms, by: Thomas H. Cormen Charles E. Leiserson Ronald L. Rivest Clifford Stein Electronic:
September 17, 2001 Algorithms and Data Structures Lecture II Simonas Šaltenis Nykredit Center for Database Research Aalborg University
Algorithms IS 320 Spring 2015 Sorting. 2 The Sorting Problem Input: –A sequence of n numbers a 1, a 2,..., a n Output: –A permutation (reordering) a 1.
COSC 3101A - Design and Analysis of Algorithms 2 Asymptotic Notations Continued Proof of Correctness: Loop Invariant Designing Algorithms: Divide and Conquer.
1/6/20161 CS 3343: Analysis of Algorithms Lecture 2: Asymptotic Notations.
2IS80 Fundamentals of Informatics Fall 2015 Lecture 5: Algorithms.
Spring 2015 Lecture 2: Analysis of Algorithms
Introduction to Algorithms (2 nd edition) by Cormen, Leiserson, Rivest & Stein Chapter 2: Getting Started.
Algorithms A well-defined computational procedure that takes some value as input and produces some value as output. (Also, a sequence of computational.
2IS80 Fundamentals of Informatics Fall 2015 Lecture 6: Sorting and Searching.
1 Ch. 2: Getting Started. 2 About this lecture Study a few simple algorithms for sorting – Insertion Sort – Selection Sort (Exercise) – Merge Sort Show.
Lecture 2 Algorithm Analysis Arne Kutzner Hanyang University / Seoul Korea.
Data Structures and Algorithm Analysis Algorithm Analysis and Sorting
2IL50 Data Structures Spring 2016 Lecture 2: Analysis of Algorithms.
CSC317 1 So far so good, but can we do better? Yes, cheaper by halves... orkbook/cheaperbyhalf.html.
 Design and Analysis of Algorithms تصميم وتحليل الخوارزميات (311 عال) Chapter 2 Sorting (insertion Sort, Merge Sort)
A Introduction to Computing II Lecture 7: Sorting 1 Fall Session 2000.
Chapter 15 Running Time Analysis. Topics Orders of Magnitude and Big-Oh Notation Running Time Analysis of Algorithms –Counting Statements –Evaluating.
CS6045: Advanced Algorithms Sorting Algorithms. Sorting Input: sequence of numbers Output: a sorted sequence.
Analysis of Algorithms CS 477/677 Instructor: Monica Nicolescu Lecture 4.
Lecture 2 Algorithm Analysis
CMPT 438 Algorithms.
Analysis of Algorithms CS 477/677
CS 583 Fall 2006 Analysis of Algorithms
CS 3343: Analysis of Algorithms
Analysis of Algorithms CS 477/677
Foundations II: Data Structures and Algorithms
Ch 7: Quicksort Ming-Te Chi
Ch 2: Getting Started Ming-Te Chi
Analysis of Algorithms
Presentation transcript:

Spring 2015 Lecture 1: Introduction 2IL50 Data Structures Spring 2015 Lecture 1: Introduction

Algorithms Algorithm a well-defined computational procedure that takes some value, or a set of values, as input and produces some value, or a set of values, as output. Algorithm sequence of computational steps that transform the input into the output. Algorithms research design and analysis of algorithms and data structures for computational problems.

Data structures Data Structure a way to store and organize data to facilitate access and modifications. Abstract data type describes functionality (which operations are supported). Implementation a way to realize the desired functionality how is the data stored (array, linked list, …) which algorithms implement the operations

The course Design and analysis of efficient algorithms for some basic computational problems. Basic algorithm design techniques and paradigms Algorithms analysis: O-notation, recursions, … Basic data structures Basic graph algorithms

Some administration first before we really get started …

Organization Lecturer: Prof. Dr. Bettina Speckmann, MF 4.105, b.speckmann@tue.nl I’m here every day but Friday … Web page: http://www.win.tue.nl/~speckman/2IL50.html Book: T.H. Cormen, C.E. Leiserson, R.L. Rivest and C. Stein. Introduction to Algorithms (3rd edition) mandatory

Prerequisites Being able to work with basic programming constructs such as linked lists, arrays, loops … Being able to apply standard proving techniques such as proof by induction, proof by contradiction ... Being familiar with sums and logarithms such as discussed in Chapter 3 and Appendix A of the textbook. If you think you might lack any of this knowledge, please come and talk to me immediately!

Grading scheme 2IL50 6 homework assignments, the best 5 of which each count for 10% of the final grade. A written exam (closed book) which counts for the remaining 50% of the final grade. If you reach less than 50% of the possible points on the homework assignments, then you are not allowed to participate in the final exam nor in the second chance exam. You will fail the course and your next chance will be next year. Your grade will be the minimum of 5 and the grade you achieved. If you reach less than 50% of the points on the final exam, then you will fail the course, regardless of the points you collected with the homework assignments. However, you are allowed to participate in the second chance exam. The grade of the second chance exam replaces the grade for the first exam, that is, your homework assignments always count for 50% of your grade. Do the homework assignments!

Homework Assignments Posted on web-page on Monday before lecture. Due Sundays at 23:59 as .pdf in the electronic mailbox of your instructor. Late assignments will not be accepted. Only 5 out of 6 assignments count, hence there are no exceptions. Must be typeset – use Latex! See example file on web-page. Name scheme: Ai-LastName.pdf. If your name is Anton van Gelderland and you submit the 1st assignment, then your file must be named A1-vanGelderland.pdf. Use the tag [2IL50] in the subject line of your email. Any questions: Stop by my office whenever you want (except Fridays!) (send email if you want to make sure that I have time)

Academic Dishonesty Academic Dishonesty All class work has to be done independently. You are of course allowed to discuss the material presented in class, homework assignments, or general solution strategies with me or your classmates, but you have to formulate and write up your solutions by yourself. You must not copy from the internet, your friends, or other textbooks. Problem solving is an important component of this course so it is really in your best interest to try and solve all problems by yourself. If you represent other people's work as your own then that constitutes fraud and will be dealt with accordingly.

Organization Components: Lectures Monday 5+6 AUD 6 Wednesday 3+4 AUD 3 Tutorials Wednesday 1+2 see web-page for rooms and instructors! The instructors will explain the solutions to the homework assign-ments of the previous week and answer any questions that arise. Office hours Thursday 17:00-18:00 around MF 4.104b Reading and writing mathematical proofs

How to read and write mathematical proofs Lecturer: Dr. Kevin Verbeek, MF 4.106, k.a.b.verbeek@tue.nl Web page: Part of Data Structures: http://www.win.tue.nl/~speckman/2IL50.html Book: Daniel Solow How to Read and Do Proofs (5th edition) not mandatory

Signing up for groups Group registration is open from today 02-02-2015 at 18:00 until tomorrow 03-02-2015 at 18:00.

Some statistics …

Sorting let’s get started …

The sorting problem Input: a sequence of n numbers ‹a1, a2, …, an› Output: a permutation of the input such that ‹ai1 ≤ … ≤ ain› The input is typically stored in arrays Numbers ≈ Keys Additional information (satellite data) may be stored with keys We will study several solutions ≈ algorithms for this problem

Describing algorithms A complete description of an algorithm consists of three parts: the algorithm (expressed in whatever way is clearest and most concise, can be English and / or pseudocode) a proof of the algorithm’s correctness a derivation of the algorithm’s running time

InsertionSort Like sorting a hand of playing cards: start with empty left hand, cards on table remove cards one by one, insert into correct position to find position, compare to cards in hand from right to left cards in hand are always sorted InsertionSort is a good algorithm to sort a small number of elements an incremental algorithm Incremental algorithms process the input elements one-by-one and maintain the solution for the elements processed so far.

Incremental algorithms Incremental algorithms process the input elements one-by-one and maintain the solution for the elements processed so far. In pseudocode: IncAlg(A) // incremental algorithm which computes the solution of a problem with input A = {x1,…,xn} initialize: compute the solution for {x1} for j = 2 to n do compute the solution for {x1,…,xj} using the (already computed) solution for {x1,…,xj-1} Check book for more pseudocode conventions no “begin - end”, just indentation

InsertionSort InsertionSort(A) // incremental algorithm that sorts array A[1..n] in non-decreasing order initialize: sort A[1] for j = 2 to A.length do sort A[1..j] using the fact that A[1.. j-1] is already sorted

InsertionSort InsertionSort(A) // incremental algorithm that sorts array A[1..n] in non-decreasing order initialize: sort A[1] for j = 2 to A.length do key = A[j] i = j -1 while i > 0 and A[i] > key do A[i+1] = A[i] i = i -1 A[i +1] = key InsertionSort is an in place algorithm: the numbers are rearranged within the array with only constant extra space. 1 3 14 17 28 6 … 1 j n

Correctness proof Use a loop invariant to understand why an algorithm gives the correct answer. Loop invariant (for InsertionSort) At the start of each iteration of the “outer” for loop (indexed by j) the subarray A[1..j-1] consists of the elements originally in A[1..j-1] but in sorted order.

Correctness proof To proof correctness with a loop invariant we need to show three things: Initialization Invariant is true prior to the first iteration of the loop. Maintenance If the invariant is true before an iteration of the loop, it remains true before the next iteration. Termination When the loop terminates, the invariant (usually along with the reason that the loop terminated) gives us a useful property that helps show that the algorithm is correct.

Correctness proof InsertionSort(A) initialize: sort A[1] for j = 2 to A.length do key = A[j] i = j -1 while i > 0 and A[i] > key do A[i+1] = A[i] i = i -1 A[i +1] = key Initialization Just before the first iteration, j = 2 ➨ A[1..j-1] = A[1], which is the element originally in A[1], and it is trivially sorted. Loop invariant At the start of each iteration of the “outer” for loop (indexed by j) the subarray A[1..j-1] consists of the elements originally in A[1..j-1] but in sorted order.

Correctness proof InsertionSort(A) initialize: sort A[1] for j = 2 to A.length do key = A[j] i = j -1 while i > 0 and A[i] > key do A[i+1] = A[i] i = i -1 A[i +1] = key Maintenance Strictly speaking need to prove loop invariant for “inner” while loop. Instead, note that body of while loop moves A[j-1], A[j-2], A[j-3], and so on, by one position to the right until proper position of key is found (which has value of A[j]) ➨ invariant maintained. Loop invariant At the start of each iteration of the “outer” for loop (indexed by j) the subarray A[1..j-1] consists of the elements originally in A[1..j-1] but in sorted order.

Correctness proof InsertionSort(A) initialize: sort A[1] for j = 2 to A.length do key = A[j] i = j -1 while i > 0 and A[i] > key do A[i+1] = A[i] i = i -1 A[i +1] = key Termination The outer for loop ends when j > n; this is when j = n+1 ➨ j-1 = n. Plug n for j-1 in the loop invariant ➨ the subarray A[1..n] consists of the elements originally in A[1..n] in sorted order. Loop invariant At the start of each iteration of the “outer” for loop (indexed by j) the subarray A[1..j-1] consists of the elements originally in A[1..j-1] but in sorted order.

Another sorting algorithm using a different paradigm …

MergeSort A divide-and-conquer sorting algorithm. Divide-and-conquer break the problem into two or more subproblems, solve the subproblems recursively, and then combine these solutions to create a solution to the original problem.

Divide-and-conquer D&CAlg(A) // divide-and-conquer algorithm that computes the solution of a problem with input A = {x1,…,xn} if # elements of A is small enough (for example 1) then compute Sol (the solution for A) brute-force else split A in, for example, 2 non-empty subsets A1 and A2 Sol1 = D&CAlg(A1) Sol2 = D&CAlg(A2) compute Sol (the solution for A) from Sol1 and Sol2 return Sol

MergeSort MergeSort(A) // divide-and-conquer algorithm that sorts array A[1..n] if A.length == 1 then compute Sol (the solution for A) brute-force else split A in 2 non-empty subsets A1 and A2 Sol1 = MergeSort(A1) Sol2 = MergeSort(A2) compute Sol (the solution for A) from Sol1 en Sol2

MergeSort MergeSort(A) // divide-and-conquer algorithm that sorts array A[1..n] if A.length == 1 then skip else n = A.length ; n1 = n/2 ; n2 = n/2 ; copy A[1.. n1] to auxiliary array A1[1.. n1] copy A[n1+1..n] to auxiliary array A2[1.. n2] MergeSort(A1) MergeSort(A2) Merge(A, A1, A2)

MergeSort 3 14 1 28 17 8 21 7 4 35 1 3 4 7 8 14 17 21 28 35 3 14 1 28 17 8 21 7 4 35 1 3 14 17 28 4 7 8 21 35 3 14 1 28 17 3 14 1 17 28 3 14

MergeSort Merging 1 3 14 17 28 A1 4 7 8 21 35 A2 A 1 3 4 7 8 14 17 21 28 35

MergeSort: correctness proof Induction on n (# of input elements) proof that the base case (n small) is solved correctly proof that if all subproblems are solved correctly, then the complete problem is solved correctly

MergeSort: correctness proof MergeSort(A) if length[A] = 1 then skip else n = A.length ; n1 = n/2 ; n2 = n/2 ; copy A[1.. n1] to auxiliary array A1[1.. n1] copy A[n1+1..n] to auxiliary array A2[1.. n2] MergeSort(A1) MergeSort(A2) Merge(A, A1, A2) Proof (by induction on n) Base case: n = 1, trivial ✔ Inductive step: assume n > 1. Note that n1 < n and n2 < n. Inductive hypothesis ➨ arrays A1 and A2 are sorted correctly Remains to show: Merge(A, A1, A2) correctly constructs a sorted array A out of the sorted arrays A1 and A2 … etc. ■ Lemma MergeSort sorts the array A[1..n] correctly.

another divide-and-conquer sorting algorithm… QuickSort another divide-and-conquer sorting algorithm…

QuickSort QuickSort(A) // divide-and-conquer algorithm that sorts array A[1..n] if length[A] ≤ 1 then skip else pivot = A[1] move all A[i] with A[i] < pivot into auxiliary array A1 move all A[i] with A[i] > pivot into auxiliary array A2 move all A[i] with A[i] = pivot into auxiliary array A3 QuickSort(A1) QuickSort(A2) A = “A1 followed by A3 followed by A2”

Analysis of algorithms some informal thoughts – for now …

Analysis of algorithms Can we say something about the running time of an algorithm without implementing and testing it? InsertionSort(A) initialize: sort A[1] for j = 2 to A.length do key = A[j] i = j -1 while i > 0 and A[i] > key do A[i+1] = A[i] i = i -1 A[i +1] = key

Analysis of algorithms Analyze the running time as a function of n (# of input elements) best case average case worst case elementary operations add, subtract, multiply, divide, load, store, copy, conditional and unconditional branch, return … An algorithm has worst case running time T(n) if for any input of size n the maximal number of elementary operations executed is T(n).

Analysis of algorithms: example n=10 n=100 n=1000 1568 150698 1.5 x 107 10466 204316 3.0 x 106 InsertionSort 6 x faster 1.35 x faster MergeSort 5 x faster InsertionSort: 15 n2 + 7n – 2 MergeSort: 300 n lg n + 50 n n = 1,000,000 InsertionSort 1.5 x 1013 MergeSort 6 x 109 2500 x faster !

Analysis of algorithms It is extremely important to have efficient algorithms for large inputs The rate of growth (or order of growth) of the running time is far more important than constants InsertionSort: Θ(n2) MergeSort: Θ(n log n)

Θ-notation Intuition: concentrate on the leading term, ignore constants 19 n3 + 17 n2 - 3n becomes Θ(n3) 2 n lg n + 5 n1.1 - 5 becomes n - ¾ n √n becomes (precise definition next lecture…) Θ(n1.1) ---

Some rules and notation log n denotes log2 n We have for a, b, c > 0 : logc (ab) = logc a + logc b b logc a loga b = logc b / logc a

Find the leading term lg35n vs. √n ? logarithmic functions grow slower than polynomial functions lga n grows slower than nb for all constants a > 0 and b > 0 n100 vs. 2 n ? polynomial functions grow slower than exponential functions na grows slower than bn for all constants a > 0 and b > 1

Announcements Today 7+8 Reading and writing mathematical proofs Emergency Latex office hour in MF 11 Today 18:00 Group registration opens on OASE Wednesday 1+2 tutorials, discuss solutions to homework A1 from 2014 (see web-page)