|   Design and Analysis of Algorithms (COMPSCI 308)Fall 2022-2023 / Session 2 (7 weeks, 35 hours)Course Period: October 24 - December 8, 2022	    
		Instructor: Mustafa MISIR (Office: CC 3019), mustafa.misir [at] dukekunshan.edu.cn   /   mm940 [at] duke.edu 
	       
	Teaching Assistant: TBA (Office: TBA), TBALectures: Monday / Tuesday / Wednesday / Thursday @ 16:15-17:30 (Classroom: IB 1053 + Zoom) 
 An algorithm is any well-defined computational procedure that takes some value, or set of values, as input and produces some value, or set of values, as output. An algorithm is thus a sequence of computational steps that transform the input into the output. An algorithm can also be viewed as a tool for solving a well-specified computational problem. The statement of the problem specifies in general terms the desired input/output relationship. The algorithm describes a specific computational procedure for achieving that input/output relationship.
 
 After having a target problem, the next step is to design an algorithm that can address the target problem. Algorithm design is a coherent discipline-one needs a specific set of concepts to define, a computational problem and a specific set of tools to design an optimal algorithm to solve it. Designing the right algorithm for a given application is a major creative act-that of taking a problem and pulling a solution out of the ether. The space of choices you can make in algorithm design is enormous, leaving you plenty of freedom.
 
 Solely designing algorithms may not be a proper approach to solve a specific problem. Understanding their behavioral characteristics together with their strengths and weaknesses is critical. Algorithm analysis is investigated for this purpose, in particular, for determining how much of a resource, such as time or memory, an algorithm uses as a function of some characteristic of the input to the algorithm, usually the size of the input.
 
 This course will touch all the major algorithm design and analysis steps while taking data structures into account. All the relevant concepts will be exemplified through existing algorithms and problems besides implementing algorithms in Python. To be specific, the design and analysis of efficient algorithms including sorting, searching, dynamic programming, graph algorithms, nondeterministic algorithms and computationally hard problems and other related topics will be studied.
 
 This course will be carried out in line with the DKU's animating principles. In particular, Collaborative Problem Solving, Research and Practice and Lucid Communication will be directly involved with this course while touching the Independence and Creativity aspect. The course will be primarily executed through in-class quick quizzes, in-class individual / group discussions and weekly assignments.
 
 By the end of this course, you will be able to:
 	     	
	>> Follow Sakai for announcements and discussionsdesign efficient and effective algorithms of varying typesimplement algorithms in consideration of the problem requirements and computational resourcesutilize appropriate data structures while developing algorithmsintroduce new algorithmic solutions for new problemsevaluate the theoretical boundaries of given algorithmsanalyze the behaviour and performance of given algorithms, referring to their strengths and weaknesses
	identify the resemblance between different problems, leading to problem hardness analysis
 
 Pre-requisites
		COMPSCI 201: Introduction to Programming and Data StructuresCOMPSCI 203: Discrete Math for Computer Science or MATH 205 / 206: Probability and Statistics Anti-requisites        
		COMPSCI 301: Algorithms and Databases The following chart shows how COMPSCI 308 fits to the DKU curriculum, where the abbreviations indicate the course types, i.e. D: Divisional, DF: Divisional Foundation, ID: Interdisciplinary and E: Elective. Refer to the DKU Undergraduate Bulletin for more details.
 
 
   
 
 
 Reference BooksIntroduction to Algorithms, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein (3rd Edition), 2009, MIT Press (Free Book: ProQuest - Duke U.) [ Lecture Slides ]
 Supplementary Books:
 	 
	Algorithms + Python:Algorithm Design, John Kleinberg, Eva Tardos (1st Edition), 2005, Pearson - Addison Wesley [ Lecture Slides & Examples ]Algorithms, Sanjoy Dasgupta, Christos Papadimitriou, Umesh Vazirani (1st Edition), 2006, McGraw-HillAlgorithms, Robert Sedgewick, Kevin Wayne (4th Edition), 2011, Addison-WesleyIntroduction to the Analysis of Algorithms, Robert Sedgewick, Philippe Flajolet (2nd Edition), 2013, Addison-Wesley [ Lecture Slides & Videos ]The Algorithm Design Manual, Steven Skiena (3rd Edition), 2020, Springer [ Old: Lecture Slides & Videos - New: Lecture Slides & Videos ]Foundations of Algorithms, Richard Neapolitan (5th Edition), 2014, Jones & Bartlett LearningData Structures and Algorithm Analysis in C++, Mark A. Weiss (4th Edition), 2014, Pearson [ Source Code in C++ ]Algorithm Design and Applications, Michael T. Goodrich, Roberto Tamassia (1st Edition), 2015, WileyAlgorithms Illuminated (Part 1): The Basics, Tim Roughgarden (1st Edition), 2017, Soundlikeyourself Publishing [ Lecture Slides & Videos ]Algorithms Illuminated (Part 2): Graph Algorithms and Data Structures, Tim Roughgarden (1st Edition), 2018, Soundlikeyourself Publishing [ Lecture Slides & Videos ]Algorithms Illuminated (Part 3): Greedy Algorithms and Dynamic Programming, Tim Roughgarden (1st Edition), 2019, Soundlikeyourself Publishing [ Lecture Slides & Videos ]Algorithms Illuminated (Part 4): Algorithms for NP-Hard Problems, Tim Roughgarden (1st Edition), 2020, Soundlikeyourself Publishing [ Lecture Slides & Videos ]Introduction to the Design and Analysis of Algorithms, Anany Levitin (3rd Edition), 2011, Addison-WesleyDesign and Analysis of Computer Algorithms, Alfred Aho, John Hopcroft, Jeffrey Ullman  (1st Edition), 1974, Addison-WesleyData Structures and Algorithms, Alfred Aho, Jeffrey Ullman (1st Edition), 1983, PearsonFundamentals of Computer Algorithms, Ellis Horowitz, Sartaj Sahni (1st Edition), 1984, CS PressA Guide to Algorithm Design: Paradigms, Methods, and Complexity Analysis, Anne Benoit, Yves Robert, Frederic Vivien  (1st Edition), 2014, CRCAlgorithms: Sequential, Parallel, and Distributed, Kenneth A. Berman, Jerome L. Paul (1st Edition), 2004, Course TechnologyThe Design and Analysis of Algorithms, Dexter C. Kozen (1st Edition), 1992, SpringerAlgorithms, Jeff Erickson (1st Edition), 2019 (Free Book)The Design of Approximation Algorithms, David P. Williamson, David B. Shmoys (1st Edition), 2011, Cambridge University (Free Book)Approximation Algorithms, Vijay V. Vazirani (1st Edition), 2003, SpringerIntroduction to the Theory of Computation, Michael Sipser (3rd Edition), 2013, CengageWhat Can Be Computed?: A Practical Guide to the Theory of Computation, John MacCormick (1st Edition), 2018, Princeton UniversityComputational Complexity: A Modern Approach, Sanjeev Arora, Boaz Barak (1st Edition), 2009, Cambridge University (Free Draft)Mathematics and Computation: A Theory Revolutionizing Technology and Science, Avi Wigderson (1st Edition), 2019, Princeton University (Free Draft)Algorithms and Complexity, Herbert S. Wilf (2nd Edition), 2002, CRCComplexity Theory: Exploring the Limits of Efficient Algorithms, Ingo Wegener (1st Edition), 2005, SpringerAutomata, Computability and Complexity: Theory and Applications, Elaine A. Rich (1st Edition), 2007, Pearson (Free Book) 	 	
		Data Structures and Algorithms in Python, Michael T. Goodrich, Roberto Tamassia, Michael H. Goldwasser (1st Edition), 2013, WileyProblem Solving with Algorithms and Data Structures using Python, Brad Miller and David Ranum, Franklin (2nd Edition), 2011, Beedle & Associates (Free Book)Think Complexity, Allen B. Downey (2nd Edition), 2016 / 2018, Green Tea Press / O'Reilly Press (Free Book) [ Source Code in Python ]Dive Into Algorithms: A Pythonic Adventure for the Intrepid Beginner, Bradford Tuckfield (1st Edition), 2021, No Starch PressAlgorithms in a Nutshell: A Practical Guide, George T. Heineman, Gary Pollice, Stanley Selkow (2nd Edition), 2016, O'Reilly Press (Partially Python)A Common-Sense Guide to Data Structures and Algorithms: Level Up Your Core Programming Skills, Jay Wengrow (2nd Edition), 2020, Pragmatic Bookshelf [ Source Code in Python, Ruby and JavaScript ] 
 
 Lecture Notes / Slides	
				         
					Week 0 (Reviews)  
					Python ProgrammingData StructuresDiscrete Mathematics 
 Week 1   [24/10 - 27/10]   (Keywords: History, Terminology and Basics; Algorithms; Computation; Asymptotic Notations)         
					About COMPSCI 308Introduction to AlgorithmsAsymptotic Notations 
 Week 2   [31/10 - 03/11]   (Keywords: Divide and Conquer; Dynamic Programming)     
					Divide and ConquerDynamic Programming 
 Week 3   [07/11 - 10/11]   (Keywords: Greedy Algorithms; Graphs; Graph Algorithms)
					Greedy AlgorithmsGraph Algorithms 
 Week 4   [14/11 - 17/11]   (Keywords: Minimum Spanning Trees; Shortest Path Algorithms)    
					Minimum Spanning TreesShortest Path Algorithms 
 Week 5   [21/11 - 24/11]   (Keywords: Optimization; Mathematical Modelling; Linear Programming; Duality; Maximum Flow)   
					Linear ProgrammingDualityMaximum Flow 
 Week 6   [28/11 - 01/12]   (Keywords: Randomized Algorithms, Hash Tables)    
					Randomized AlgorithmsHash Tables 
 Week 7   [05/12 - 08/12]   (Keywords: P; NP; NP-Completeness; Approximation Algorithms)      
					P and NPNP-CompletenessApproximation Algorithms 
 
 Grading   
		Homework Assignments: 20%    
		Mathematical, Conceptual, or Programming relatedSubmit on Sakai; 7 in total Quizzes: 10%Weekly Journals: 10%    
		Each week, write a page or so about what you have learnedSubmit on Sakai; 2 points off for each missing journal, capped at 10 Midterm: 25%Final: 35% 
 
 Reference Courses
 
 Other BooksQuick / Easy Reads:	    
		Python Programming:Grokking Algorithms: An Illustrated Guide for Programmers and Other Curious People, Aditya Bhargava (1st Edition), 2018, ManningAlgorithms Unlocked, Thomas H. Cormen (1st Edition), 2013, MIT PressAlgorithms to Live By: The Computer Science of Human Decisions, Brian Christian, Tom Griffiths (1st Edition), 2016, Henry Holt and Co. [ Video Lecture ]Algorithms, Panos Louridas (1st Edition), 2020, MIT PressReal-World Algorithms: A Beginner's Guide, Panos Louridas (1st Edition), 2017, MIT PressNine Algorithms that Changed the Future: the Ingenious Ideas that Drive Today's Computers, John MacCormick (1st Edition), 2012, Princeton University PressWhat Algorithms Want: Imagination in the Age of Computing, Ed Finn (1st Edition), 2017, MIT Press 	    
		Foundations of Computer Science:Introducing Python for Computer Science and Data Scientists, Paul Deitel, Harvey Deitel (1st Edition), 2020, Pearson   
		Introduction to Computation and Programming Using Python: With Application to Computational Modeling and Understanding Data, John V. Guttag (3rd Edition), 2021, MIT Press
		Think Python: How to Think Like a Computer Scientist, Allen B. Downey (2nd Edition), 2016, O'Reilly Press (Free Book)How to Think Like a Computer Scientist: Learning with Python 3, Peter Wentworth, Jeffrey Elkner, Allen B. Downey, Chris Meyers (3rd Edition), 2012 (Free Book)A Programmer's Guide to Computer Science (Vol. 1),  William M. Springer II (1st Edition), 2019, Jaxson MediaA Programmer's Guide to Computer Science (Vol. 2),  William M. Springer II (1st Edition), 2020, Jaxson MediaA Byte of Python, Swaroop C. H. (4th Edition), 2016 (Free Book)Project Python, Devin Balkcom, 2011 (Free Book)Python for Everybody: Exploring Data in Python 3, Charles Severance, 2016 (Free Book)Automate The Boring Stuff With Python, Al Sweigart (2nd Edition), 2019, No Starch Press (Free Book)Beyond the Basic Stuff with Python, Al Sweigart (1st Edition), 2020, No Starch Press (Free Book)Python Programming in Context, Bradley N. Miller, David L. Ranum, Julie Anderson (3rd Edition), 2019, Jones & Bartlett LearningPython Programming: An Introduction to Computer Science, John Zelle (3rd Edition), 2016, Franklin, Beedle & AssociatesA Hands-On, Project-Based Introduction to Programming, Eric Matthes (2nd Edition), 2016, No Starch Press (Free Book)Learn Python 3 the Hard Way, Zed A. Shaw (1st Edition), 2017, Addison-WesleyIntroducing Python: Modern Computing in Simple Packages, Bill Lubanovic (2nd Edition), 2019, O'Reilly PressClean Code in Python: Develop Maintainable and Efficient Code, Mariano Anaya (2nd Edition), 2021, PacktThe Self-Taught Computer Scientist: The Beginner's Guide to Data Structures & Algorithms, Cory Althoff (1st Edition), 2021, WileyThe Big Book of Small Python Projects: 81 Easy Practice Programs, Al Sweigart (1st Edition), 2021, No Starch Press (Free Book)Invent Your Own Computer Games with Python, Al Sweigart (4th Edition), 2016, No Starch Press (Free Book)Cracking Codes with Python: An Introduction to Building and Breaking Ciphers, Al Sweigart (1st Edition), 2018, No Starch Press (Free Book) 
	      
    
		
		
		Concrete Mathematics: A Foundation for Computer Science, Ronald L. Graham, Donald E. Knuth, Oren Patashnik (2nd Edition), 1994, Addison-Wesley
		
		Mathematics for Computer Science, Eric Lehman, F. Thomson Leighton, Albert R. Meyer (1st Edition), 2017 (2018R), Samurai Media (Free Book) [ 6.042: Mathematics for Computer Science (MIT) - Materials ]
		
		Mathematics: A Discrete Introduction, Edward A. Scheinerman (3rd Edition), 2012, Cengage Learning
		
		Discrete Mathematics and Its Applications, Kenneth H. Rosen (8th Edition), 2019, McGraw-Hill
		
		Discrete Mathematics: An Open Introduction, Oscar Levin (3rd Edition), 2021 (Free Book)
		
		Essential Discrete Mathematics for Computer Science, Harry Lewis, Rachel Zax (1st Edition), 2019, Princeton University 
		
		Connecting Discrete Mathematics and Computer Science, David Liben-Nowell (1st Edition), 2022, Cambridge University Press      
		
		Book of Proof, Richard H. Hammack (3rd Edition), 2018 (Free Book)
		
		Applied Combinatorics, Mitchel T. Keller, William T. Trotter (3rd Edition), 2021 (Free Book)
		
		A Decade of the Berkeley Math Circle: The American Experience (Volume 1, Volume 2), Zvezdelina Stankova, Tom Rike (Eds), 2008, American Mathematical Society
		
		How to Think Like a Mathematician: A Companion to Undergraduate Mathematics, Kevin Houston (1st Edition), 2009, Cambridge University Press
		
		The Art of Problem Solving (Vol. 2): And Beyond, Richard Rusczyk, Sandor Lehoczky (7th Edition), 2006, AoPS Incorporated
		
		The Art of Problem Solving (Vol. 1), Sandor Lehoczky, Richard Rusczyk (7th Edition), 2006, AoPS Incorporated
		
		What Is Mathematics? An Elementary Approach to Ideas and Methods, Richard Courant, Herbert Robbins (2nd Edition), 1996, Oxford University Press
		 
 
 Other Materials / ResourcesCheat Sheets: 
	
	
	
	
	Algorithm Visualization / Animation: 
	
    
	Miscellaneous: 
	
	
    
		
   
	General:
 |