CS 3343: Analysis of Algorithms

Slides:



Advertisements
Similar presentations
Introduction to Algorithms 6.046J Lecture 1 Prof. Shafi Goldwasser Prof. Erik Demaine.
Advertisements

5/1/20151 Analysis of Algorithms Introduction. 5/1/20152 Are you want to be a computer scientist?
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.
Analysis of Algorithms CS 477/677 Instructor: Monica Nicolescu Lecture 5.
What is an Algorithm? (And how do we analyze one?)
CS Section 600 CS Section 002 Dr. Angela Guercio Spring 2010.
CS Section 600 CS Section 002 Dr. Angela Guercio Spring 2010.
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:
CSE 830: Design and Theory of Algorithms
CSE 830: Design and Theory of Algorithms
CSE 830: Design and Theory of Algorithms Dr. Eric Torng.
CS3381 Des & Anal of Alg ( SemA) City Univ of HK / Dept of CS / Helena Wong 2. Analysis of Algorithms - 1 Analysis.
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,
Algorithms. Introduction The methods of algorithm design form one of the core practical technologies of computer science. The main aim of this lecture.
Data Structure & Algorithm Lecture 3 –Algorithm Analysis JJCAO.
David Luebke 1 8/17/2015 CS 332: Algorithms Asymptotic Performance.
COMP s1 Computing 2 Complexity
Instructor Neelima Gupta
CS223 Algorithms D-Term 2013 Instructor: Mohamed Eltabakh WPI, CS Introduction Slide 1.
Introduction to Algorithms Jiafen Liu Sept
Mathematics Review and Asymptotic Notation
Introduction to Algorithms 6.046J/18.401J/SMA5503 Lecture 1 Prof. Charles E. Leiserson.
10/14/ Algorithms1 Algorithms - Ch2 - Sorting.
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.
Major objective of this course is: Design and analysis of modern algorithms Different variants Accuracy Efficiency Comparing efficiencies Motivation thinking.
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:
Program Efficiency & Complexity Analysis. Algorithm Review An algorithm is a definite procedure for solving a problem in finite number of steps Algorithm.
MS 101: Algorithms Instructor Neelima Gupta
MS 101: Algorithms Instructor Neelima Gupta
September 17, 2001 Algorithms and Data Structures Lecture II Simonas Šaltenis Nykredit Center for Database Research Aalborg University
David Luebke 1 11/29/2015 CS 332: Algorithms Introduction Proof By Induction Asymptotic notation.
September 9, Algorithms and Data Structures Lecture II Simonas Šaltenis Nykredit Center for Database Research Aalborg University
David Luebke 1 1/6/2016 CS 332: Algorithms Asymptotic Performance.
1/6/20161 CS 3343: Analysis of Algorithms Lecture 2: Asymptotic Notations.
Asymptotic Performance. Review: Asymptotic Performance Asymptotic performance: How does algorithm behave as the problem size gets very large? Running.
2IS80 Fundamentals of Informatics Fall 2015 Lecture 5: Algorithms.
Introduction to Algorithms (2 nd edition) by Cormen, Leiserson, Rivest & Stein Chapter 2: Getting Started.
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.
Introduction to Algorithms 6.046J/18.401J/SMA5503 Lecture 1 Prof. Charles E. Leiserson.
BITS Pilani Pilani Campus Data Structure and Algorithms Design Dr. Maheswari Karthikeyan Lecture1.
Chapter 15 Running Time Analysis. Topics Orders of Magnitude and Big-Oh Notation Running Time Analysis of Algorithms –Counting Statements –Evaluating.
September 18, Algorithms and Data Structures Lecture II Simonas Šaltenis Aalborg University
CS6045: Advanced Algorithms Sorting Algorithms. Sorting Input: sequence of numbers Output: a sorted sequence.
CIS 313: Analysis and Design of Algorithms Assoc. Prof Hassan Aly Department of Computer Science and Information College of Science at AzZulfi Al-Majmaah.
CMPT 438 Algorithms.
Design and Analysis of Algorithms
CS 3343: Analysis of Algorithms
CS 583 Fall 2006 Analysis of Algorithms
CS 3343: Analysis of Algorithms
CS 3343: Analysis of Algorithms
Foundations II: Data Structures and Algorithms
CS 3343: Analysis of Algorithms
Objective of This Course
CSC 413/513: Intro to Algorithms
Introduction to Algorithms Analysis
CMPT 438 Algorithms Instructor: Tina Tian.
Ch. 2: Getting Started.
Course policy.
Dr. Chengwei Lei CEECS California State University, Bakersfield
Algorithms and Data Structures Lecture II
Presentation transcript:

CS 3343: Analysis of Algorithms Lecture 1: Introduction Some slides courtesy from Jeff Edmonds @ York University 4/22/2017

The course Instructor: Dr. Jianhua Ruan TA: Erdal Akin Jianhua.ruan@utsa.edu Office: NPB 3.202 Office hours: T 1-2pm or by appointment TA: Erdal Akin Grader: Chih-Wei Yu Contact info online 4/22/2017

The course Purpose: a rigorous introduction to the design and analysis of algorithms Textbook: Introduction to Algorithms, Cormen, Leiserson, Rivest, Stein An excellent reference you should own Go to course website for a link to the errata http://cs.utsa.edu/~jruan/teaching/cs3343_spring_2015/ Or go to http://cs.utsa.edu/~jruan/ then follow “teaching”. Under “textbook” 4/22/2017

Course Format Two lectures + 1 recitation / week Recitation Mandatory CS3343.002 should attend CS3341.003 CS3343.001 can attend CS3341.001/002 No recitation the first week ~8 homework assignments Problem sets Occasional programming assignments Typically due in 1-1.5 week Occasional in-class quizzes and exercises Two midterms + final exam 4/22/2017

Grading policy Homework: 30% midterm 1: 16% midterm 2: 16% Final exam: 32% Quiz and participation 6% One lowest grade in homework will be dropped I reserve the right to slightly adjust the weights of individual components if necessary. 4/22/2017

Late homework submissions 10% penalty if submitted the same day after the instructor left classroom 15% penalty each additional day after the submission deadline Submission will not be accepted once TA shows solution in recitation or instructor puts solution online Email submission is acceptable in case of emergency. Include “CS3343” in subject. 4/22/2017

Exams Exams cannot be made up, cannot be taken early, and must be taken in class at the scheduled time.  Proofs are needed for exceptions or true emergencies 4/22/2017

Cheating You are not allowed to read, copy, or rewrite the solutions written by others (in this or previous terms). Copying materials from websites, books or any other sources is considered equivalent to copying from another student. If two people are caught sharing solutions, then both the copier and copiee will be held equally responsible, which will result in zero point in homework. Cheating on an exam will result in failing the course. 4/22/2017

Getting answers from the internet is CHEATING Getting answers from your friends is I will send it to the Dean! You will be nailed! However, teamwork is encouraged. Group size at most 3. Clearly acknowledge who you worked with. 4/22/2017

Do NOT get answers from other groups! Do NOT do half the assignment and your partner does the other half. Each try all on your own. Discuss ideas verbally at a high-level but write up on your own. 4/22/2017

Attendance Missing 3 or more classes / recitations (whenever attendance is checked) will result in a minimum of 5 points taken off your final grade In reality, attendance and final grade are highly correlated, even without the penalty 4/22/2017

Feedbacks We appreciate your feedbacks Your feedbacks help me know how I can better deliver my lectures, which will ultimately benefit you You get bonus points in homework for your feedbacks 4/22/2017

Introduction Why should you study algorithms What is an algorithm What you can expect to learn from this course 4/22/2017

Please feel free to ask questions! Help me know what people are not understanding We do have a lot of material It’s your job to slow me down 4/22/2017

So you want to be a computer scientist? 4/22/2017

Is your goal to be a mundane programmer? 4/22/2017

Or a great leader and thinker? 4/22/2017

Everyday industry asks these questions. Boss assigns task: Given today’s prices of pork, grain, sawdust, … Given constraints on what constitutes a hotdog. Make the cheapest hotdog. Everyday industry asks these questions. 4/22/2017

Your answer: Um? Tell me what to code. With more sophisticated software engineering systems, the demand for mundane programmers will diminish. 4/22/2017

Soon all known algorithms will be available in libraries. Your answer: I learned this great algorithm that will work. Soon all known algorithms will be available in libraries. Your boss might change his mind. He now wants to make the most profitable hotdogs. 4/22/2017

Great thinkers will always be needed. Your answer: I can develop a new algorithm for you. Great thinkers will always be needed. 4/22/2017

How do I become a great thinker? Maybe I’ll never be… 4/22/2017

Learn from the classical problems 4/22/2017

Shortest path end Start 4/22/2017

Traveling salesman problem 4/22/2017

Knapsack problem 4/22/2017

There is only a handful of classical problems. Nice algorithms have been designed for them If you know how to solve a classical problem (e.g., the shortest-path problem), you can use it to do a lot of different things Abstract ideas from the classical problems Map your boss’ requirement to a classical problem Solve with classical algorithms Modify it if needed 4/22/2017

How to design an algorithm by yourself? Learn some meta algorithms What if you can NOT map your boss’ requirement to any existing classical problem? How to design an algorithm by yourself? Learn some meta algorithms A meta algorithm is a class of algorithms for solving similar abstract problems There is only a handful of them E.g. divide and conquer, greedy algorithm, dynamic programming Learn the ideas behind the meta algorithms Design a concrete algorithm for your task 4/22/2017

Useful learning techniques Read Ahead. Read the textbook before the lectures. This will facilitate more productive discussion during class. Explain the material over and over again out loud to yourself, to each other, and to your stuffed bear. Be creative. Ask questions: Why is it done this way and not that way? Practice. Try to solve as many exercises in the textbook as you can. 4/22/2017

What will we study? Expressing algorithms Algorithm validation Define a problem precisely and abstractly Presenting algorithms using pseudocode Algorithm validation Prove that an algorithm is correct Algorithm analysis Time and space complexity What problems are so hard that efficient algorithms are unlikely to exist Designing algorithms Algorithms for classical problems Meta algorithms (classes of algorithms) and when you should use which 4/22/2017

What is an algorithm? Algorithms are the ideas behind computer programs. An algorithm is the thing that stays the same regardless of programming language and the computing hardware 4/22/2017

What is an algorithm? (cont’) An algorithm is a precise and unambiguous specification of a sequence of steps that can be carried out to solve a given problem or to achieve a given condition. An algorithm accepts some value or set of values as input and produces a value or set of values as output. Algorithms are closely intertwined with the nature of the data structure of the input and output values 4/22/2017

How to express algorithms? Nature language (e.g. English) Pseudocode Real programming languages Increasing precision Ease of expression Describe the ideas of an algorithm in nature language. Use pseudocode to clarify sufficiently tricky details of the algorithm. 4/22/2017

How to express algorithms? Nature language (e.g. English) Pseudocode Real programming languages Increasing precision Ease of expression To understand / describe an algorithm: Get the big idea first. Use pseudocode to clarify sufficiently tricky details 4/22/2017

Example: sorting Input: A sequence of N numbers a1…an Output: the permutation (reordering) of the input sequence such that a1 ≤ a2 … ≤ an. Possible algorithms you’ve learned so far Insertion, selection, bubble, quick, merge, … More in this course We seek algorithms that are both correct and efficient 4/22/2017

Insertion Sort InsertionSort(A, n) { for j = 2 to n { } ▷ Pre condition: A[1..j-1] is sorted 1. Find position i in A[1..j-1] such that A[i] ≤ A[j] < A[i+1] 2. Insert A[j] between A[i] and A[i+1] ▷ Post condition: A[1..j] is sorted 1 j sorted 4/22/2017

Insertion Sort InsertionSort(A, n) { for j = 2 to n { key = A[j]; i = j - 1; while (i > 0) and (A[i] > key) { A[i+1] = A[i]; i = i – 1; } A[i+1] = key } } 1 i j Key sorted 4/22/2017

Correctness What makes a sorting algorithm correct? In the output sequence, the elements are ordered non-decreasingly Each element in the input sequence has a unique appearance in the output sequence [2 3 1] => [1 2 2] X [2 2 3 1] => [1 1 2 3] X 4/22/2017

Correctness For any algorithm, we must prove that it always returns the desired output for all legal instances of the problem. For sorting, this means even if (1) the input is already sorted, or (2) it contains repeated elements. Algorithm correctness is NOT obvious in some problems (e.g., optimization) 4/22/2017

How to prove correctness? Given a concrete input, eg. <4,2,6,1,7> trace it and prove that it works. Given an abstract input, eg. <a1, … an> trace it and prove that it works. Sometimes it is easier to find a counterexample to show that an algorithm does NOT work. Think about all small examples Think about examples with extremes of big and small Think about examples with ties Failure to find a counterexample does NOT mean that the algorithm is correct 4/22/2017

An Example: Insertion Sort InsertionSort(A, n) { for j = 2 to n { key = A[j]; i = j - 1; ▷Insert A[j] into the sorted sequence A[1..j-1] while (i > 0) and (A[i] > key) { A[i+1] = A[i]; i = i – 1; } A[i+1] = key } } 1 i j Key sorted 4/22/2017

Example of insertion sort 5 2 4 6 1 3 2 5 4 6 1 3 2 4 5 6 1 3 2 4 5 6 1 3 1 2 4 5 6 3 1 2 3 4 5 6 Done! 4/22/2017

Use loop invariants to prove the correctness of loops A loop invariant (LI) is a formal statement about the variables in your program which holds true throughout the loop Claim: at the start of each iteration of the for loop, the subarray A[1..j-1] consists of the elements originally in A[1..j-1] but in sorted order. Proof by induction Initialization: the LI is true prior to the 1st iteration Maintenance: if the LI is true before the jth iteration, it remains true before the (j+1)th iteration Termination: when the loop terminates, the LI gives us a useful property to show that the algorithm is correct 4/22/2017

Prove correctness using loop invariants InsertionSort(A, n) { for j = 2 to n { key = A[j]; i = j - 1; ▷Insert A[j] into the sorted sequence A[1..j-1] while (i > 0) and (A[i] > key) { A[i+1] = A[i]; i = i – 1; } A[i+1] = key } } Loop invariant: at the start of each iteration of the for loop, the subarray A[1..j-1] consists of the elements originally in A[1..j-1] but in sorted order. 4/22/2017

Initialization InsertionSort(A, n) { for j = 2 to n { key = A[j]; i = j - 1; ▷Insert A[j] into the sorted sequence A[1..j-1] while (i > 0) and (A[i] > key) { A[i+1] = A[i]; i = i – 1; } A[i+1] = key } } Subarray A[1] is sorted. So loop invariant is true before the loop starts. Loop invariant: at the start of each iteration of the for loop, the subarray A[1..j-1] consists of the elements originally in A[1..j-1] but in sorted order. 4/22/2017

Loop invariant: at the start of each iteration of the for loop, the subarray A[1..j-1] consists of the elements originally in A[1..j-1] but in sorted order. Maintenance InsertionSort(A, n) { for j = 2 to n { key = A[j]; i = j - 1; ▷Insert A[j] into the sorted sequence A[1..j-1] while (i > 0) and (A[i] > key) { A[i+1] = A[i]; i = i – 1; } A[i+1] = key } } Assume loop variant is true prior to iteration j Loop variant will be true before iteration j+1 1 i j Key sorted 4/22/2017

The algorithm is correct! Loop invariant: at the start of each iteration of the for loop, the subarray A[1..j-1] consists of the elements originally in A[1..j-1] but in sorted order. Termination InsertionSort(A, n) { for j = 2 to n { key = A[j]; i = j - 1; ▷Insert A[j] into the sorted sequence A[1..j-1] while (i > 0) and (A[i] > key) { A[i+1] = A[i]; i = i – 1; } A[i+1] = key } } The algorithm is correct! Upon termination, A[1..n] contains all the original elements of A in sorted order. 1 n j=n+1 Sorted 4/22/2017

Efficiency Correctness alone is not sufficient Brute-force algorithms exist for most problems To sort n numbers, we can enumerate all permutations of these numbers and test which permutation has the correct order Why cannot we do this? Too slow! By what standard? 4/22/2017

How to measure complexity? Accurate running time is not a good measure It depends on input It depends on the machine you used and who implemented the algorithm It depends on the weather, maybe  We would like to have an analysis that does not depend on those factors 4/22/2017

Machine-independent A generic uniprocessor random-access machine (RAM) model No concurrent operations Each simple operation (e.g. +, -, =, *, if, for) takes 1 step. Loops and subroutine calls are not simple operations. All memory equally expensive to access Constant word size Unless we are explicitly manipulating bits 4/22/2017

Running Time Number of primitive steps that are executed Except for time of executing a function call most statements roughly require the same amount of time y = m * x + b c = 5 / 9 * (t - 32 ) z = f(x) + g(x) We can be more exact if need be 4/22/2017

Asymptotic Analysis Running time depends on the size of the input Larger array takes more time to sort T(n): the time taken on input with size n Look at growth of T(n) as n→∞. “Asymptotic Analysis” Size of input is generally defined as the number of input elements In some cases may be tricky 4/22/2017

Running time of insertion sort The running time depends on the input: an already sorted sequence is easier to sort. Parameterize the running time by the size of the input, since short sequences are easier to sort than long ones. Generally, we seek upper bounds on the running time, because everybody likes a guarantee. 4/22/2017

Kinds of analyses Worst case Best case – not very useful Average case Provides an upper bound on running time An absolute guarantee Best case – not very useful Average case Provides the expected running time Very useful, but treat with care: what is “average”? Random (equally likely) inputs Real-life inputs 4/22/2017

Analysis of insertion Sort InsertionSort(A, n) { for j = 2 to n { key = A[j] i = j - 1; while (i > 0) and (A[i] > key) { A[i+1] = A[i] i = i - 1 } A[i+1] = key } } How many times will this line execute? 4/22/2017

Analysis of insertion Sort InsertionSort(A, n) { for j = 2 to n { key = A[j] i = j - 1; while (i > 0) and (A[i] > key) { A[i+1] = A[i] i = i - 1 } A[i+1] = key } } How many times will this line execute? 4/22/2017

Analysis of insertion Sort Statement cost time__ InsertionSort(A, n) { for j = 2 to n { c1 n key = A[j] c2 (n-1) i = j - 1; c3 (n-1) while (i > 0) and (A[i] > key) { c4 S A[i+1] = A[i] c5 (S-(n-1)) i = i - 1 c6 (S-(n-1)) } 0 A[i+1] = key c7 (n-1) } 0 } S = t2 + t3 + … + tn where tj is number of while expression evaluations for the jth for loop iteration 4/22/2017

Analyzing Insertion Sort T(n) = c1n + c2(n-1) + c3(n-1) + c4S + c5(S - (n-1)) + c6(S - (n-1)) + c7(n-1) = c8S + c9n + c10 What can S be? Best case -- inner loop body never executed tj = 1  S = n - 1 T(n) = an + b is a linear function Worst case -- inner loop body executed for all previous elements tj = j  S = 2 + 3 + … + n = n(n+1)/2 - 1 T(n) = an2 + bn + c is a quadratic function Average case Can assume that on average, we have to insert A[j] into the middle of A[1..j-1], so tj = j/2 S ≈ n(n+1)/4 T(n) is still a quadratic function 4/22/2017

Asymptotic Analysis Ignore actual and abstract statement costs Order of growth is the interesting measure: Highest-order term is what counts As the input size grows larger it is the high order term that dominates 4/22/2017

Comparison of functions log2n n nlog2n n2 n3 2n n! 10 3.3 33 102 103 106 6.6 660 104 1030 10158 109 13 105 108 1012 17 1010 1015 20 107 1018 For a super computer that does 1 trillion operations per second, it will be longer than 1 billion years 4/22/2017

Order of growth 1 << log2n << n << nlog2n << n2 << n3 << 2n << n! (We are slightly abusing of the “<<“ sign. It means a smaller order of growth). 4/22/2017

Asymptotic notations We say InsertionSort’s worst-case running time is Θ(n2) Properly we should say running time is in Θ(n2) It is also in O(n2 ) What’s the relationship between Θ and O? Formal definition next time 4/22/2017