Download CSE373: Data Structures & Algorithms - Exam Preparation and Course Wrap-up and more Lecture notes Design in PDF only on Docsity!
CSE373: Data Structures & Algorithms
Lecture 23: Course Victory Lap
Kevin Quinn
Fall 2015
Today
- Rest-of-course logistics: exam, etc.
- Review of main course themes
- Course evaluations
- Thoughtful and constructive feedback deeply appreciated
- (Including what you liked) 2
- Sorting
- Minimum Spanning Trees
- Parallelism And Concurrency
- Problem Solving
- Perserving Abstractions
Post Midterm Topics
- Properties and runtimes of varying sorting algorithms
- How much extra space required? In place?
- Partially sorted? Reverse order?
- Homework 6 is great to help prepare
- Given a following block mystery psuedocode, determine which sorting algorithm it is
- Non-comparison based sorts (bucket sort and radix sort)
Sorting
- What is the difference?
- Maps and Reductions
- Map : Applying a function to all of the values in a collection, resulting in a identical length collection. - Map([1,2,3,4,5,6], +1) = [2,3,4,5,6,7]
- Reduction : Applying a function to a collection to reduce it to a single value. - Reduce([1,2,3,4,5,6], leftmost even number) = 2
- Work : How long it takes 1 processor to execute a sequentially execute a block of code
- Span : how long it takes infinite processors to execute a block of code
Parallelism and Concurrency
7
- Copy in vs. Copy out
- To protect internal structures from being modified by clients
- Private and Final fields
- How do they impact immutability?
- Hiding unnecessary information from Clients
- For example : A client generally does not need to know that your Disjoint sets are being represented as Uptrees
- Another example : Java’s HashTable does not tell you what hashcode they are using. Why?
Preserving Abstraction
Victory Lap
A victory lap is an extra trip around the track
- By the exhausted victors (that’s us) J Review course goals
- Slides from Lecture 1
- What makes CSE373 special
Thank you!
Big thank-you to your TAs: Rocne Hunter Hunter 2. Bessie Rahul Johnson Eden Megan Mauricio Andy!
Now three slides, completely unedited, from Lecture 1
- Hopefully they make more sense now
- Hopefully we succeeded
Data Structures
- Introduction to Algorithm Analysis
- Lists, Stacks, Queues
- Trees, Hashing, Dictionaries
- Heaps, Priority Queues
- Sorting
- Disjoint Sets
- Graph Algorithms
- May have time for other brief exposure to topics, maybe parallelism
Goals
- Be able to make good design choices as a developer, project manager, etc. - Reason in terms of the general abstractions that come up in all non-trivial software (and many non-software) systems
- Be able to justify and communicate your design decisions Kevin’s take:
- Key abstractions used almost every day in just about anything related to computing and software
- It is a vocabulary you are likely to internalize permanently
Hopefully cse373 will not be your last exposure to computer science. There are lots of other awesome computer science courses for non-cse majors!
- CSE 154: Web Programming
- Developing Websites and client and server side software
- CSE 374: Intermediate programming Concepts and Tools
- Concepts of lower-level programming (C/C++) and explicit memory management
- CSE 417: Algorithms and Computational Complexity
- NP Complete problems, undecidable problems, graph theory and complexity
- CSE 415: Introduction to Artificial Intelligence
- Knowledge representation, logical and probabilistic reasoning, learning, language understanding, intro to game theory
Where next?
- Haskell : http://learnyouahaskell.com/chapters
- C++ : http://www.learncpp.com/
- Scala : http://www.scala-lang.org/documentation/
- Ruby : https://www.codecademy.com/learn/ruby
- PHP : https://www.codecademy.com/learn/php
- Racket : https://learnxinyminutes.com/docs/racket/
- There are resources of 100’s of languages online. Pick one and mess with it!
Learn a new Language!
- Using Unity : https://www.udemy.com/unitycourse/
- Using ActionScript : https://www.siteground.com/tutorials/actionscript/
- Make an Android App (using mostly Java): http://developer.android.com/training/basics/firstapp/index.html
Learn to code games!