

@ 1,7 +1,33 @@ 



# TODO List  Software Engineering 







Table of Contents: 



* [Data Structures](#Data Structures) 



* [Arrays](#arrays) 



* [Linked Lists](#ll) 



* [Stacks and Queues](#sq) 



* [Trees](#trees) 



* [Priority Queues and Heaps](#priorityq) 



* [Dictionaries](#dict) 



* [Hash tables](#hash) 



* [Maps, Sets, Skip Lists](#maps) 



* [Search Trees](#searchtree) 



* [Graphs](#graphs) 



* [Advanced Data Structures (Skiena)](#adv) 



* [Data Structures and Libraries](#lib) 



* [Algorithms](#algorithms) 



* [Practice and Applications](#practice) 



* [Project Euler](#euler) 



* [ICPC](#icpc) 



* [Google Code Jam](#codejam) 























<a name="data_structures"></a> 



## Data Structures 







<a name="arrays"></a> 



### Arrays/Array Lists 







[X] Arrays and ArrayBased Sequences: Python 


@ 50,6 +76,7 @@ 



 











<a name="ll"></a> 



### Linked Lists 







[X] Linked lists: Java 


@ 87,6 +114,7 @@ 



 











<a name="sq"></a> 



### Stacks Queues 







[X] Stacks and Queues: Python 


@ 144,78 +172,148 @@ 



 











### Skiena: Algorithms, Advanced Data Structures, Programming Challenges 







[ ] Advanced Data Structures: Dictionaries, Priority Queues, Binary Trees, Hash Tables 



 06/02, 06/03 



<a name="trees"></a> 



### Trees 







[ ] Trees: Python 



 06/07  06/09 



 Books: 



 Skiena Chapter 3 



 Goodrich Python Chapter 8 



 Goodrich trees coverage includes patterns, abstract methods 



 Wiki notes: 



 [https://charlesreid1.com/wiki/Dictionaries](https://charlesreid1.com/wiki/Dictionaries) 



 [https://charlesreid1.com/wiki/Priority_Queues](https://charlesreid1.com/wiki/Priority_Queues) 



 [https://charlesreid1.com/wiki/Template:TreesFlag](https://charlesreid1.com/wiki/Template:TreesFlag) 



 End of chapter questions: 



 Skiena chapter 3 question solutions on wiki 



Git code: 







(This ended up being quite a jump in a different direction. 



Much more practical focus on algorithms, only the most useful data structures, 



only the core of each data structure, basic operations and bigO analysis.) 















 











## Trees 



o 







[ ] Trees: Python 



 06/07 



[ ] Trees: Java 



 06/10  06/13 



 Books: 



 Goodrich Python Chapter 8 



 Goodrich trees coverage includes interfaces/abstract classes/virtual methods 



 Goodrich Java Chapter 8 



 Goodrich trees coverage includes interfaces, abstract classes, virtual methods 



 Wiki notes: 



 [https://charlesreid1.com/wiki/Binary_Trees/LinkedBinTree](https://charlesreid1.com/wiki/Binary_Trees/LinkedBinTree) 



 [https://charlesreid1.com/wiki/Trees/Preorder](https://charlesreid1.com/wiki/Trees/Preorder) 



 [https://charlesreid1.com/wiki/Binary_Trees/Inorder](https://charlesreid1.com/wiki/Binary_Trees/Inorder) 



 [https://charlesreid1.com/wiki/Trees/Postorder](https://charlesreid1.com/wiki/Trees/Postorder) 



 [https://charlesreid1.com/wiki/Trees/Operations_Performance](https://charlesreid1.com/wiki/Trees/Operations_Performance) 



 End of chapter questions: 



 Skiena: [https://charlesreid1.com/wiki/Tree/LogN_Min_Search](https://charlesreid1.com/wiki/Tree/LogN_Min_Search) 



 Expression trees: [https://charlesreid1.com/wiki/Expression_Trees](https://charlesreid1.com/wiki/Expression_Trees) 



 Another, more lightweight implementation of trees 



 Important thing is not to have the fanciest implementation, but to have one that is fast and that works for your application. 



 Example: implementing a stack node alone, rather than a full stack object, made it really fast to add and remove things. 











 











[ ] Trees: binary search trees 



[ ] Trees: heap trees 



 







































<a name="priorityq"></a> 



### Priority Queues and Heaps 







[ ] Trees: priority queues 



[ ] Trees: balanced search trees 



[ ] Trees: red black trees 



[ ] Trees: tree traversal 



[ ] Trees: heap trees 











## Dictionaries 











<a name="dict"></a> 



### Dictionaries 







[ ] Dictionaries/Maps 















<a name="hash"></a> 



## Hash Tables 







[ ] Hash tables 











## Graphs 











<a name="maps"></a> 



### Maps, Sets, Skip Lists 



















<a name="searchtree"></a> 



### Search Trees 







[ ] Trees: binary search trees 



[ ] Trees: balanced search trees 



[ ] Trees: red black trees 















### Graphs 







[ ] Graphs: directed and undirected 



[ ] Graphs: graph <> adjacency matrix/list 



[ ] Graphs: BFS, DFS 











## Guava 















<a name="adv"></a> 



## Skiena: Algorithms, Advanced Data Structures, Programming Challenges 







[ ] Advanced Data Structures: Dictionaries, Priority Queues, Binary Trees, Hash Tables 



 06/02, 06/03 



 Books: 



 Skiena Chapter 3 



 Wiki notes: 



 [https://charlesreid1.com/wiki/Dictionaries](https://charlesreid1.com/wiki/Dictionaries) 



 [https://charlesreid1.com/wiki/Priority_Queues](https://charlesreid1.com/wiki/Priority_Queues) 



 End of chapter questions: 



 Skiena chapter 3 question solutions on wiki 



Git code: 







(This ended up being quite a jump in a different direction. 



Much more practical focus on algorithms, only the most useful data structures, 



only the core of each data structure, basic operations and bigO analysis.) 















<a name="lib"></a> 



## Data Structures Libraries 







Some libraries that provide data structures in Java. 







### Guava 







[ ] Google Guava Library 







 







### Apache Commons 







[ ] Apache Commons Library 







 



















<a name="algorithms"></a> 



## Algorithms 







### Complexity and Big O Notation 







[X] Algorithm complexity and bigoh notation 



 05/26, 05/27 



 Books: 


@ 235,10 +333,13 @@ o 



 











### Timing 







[ ] Algorithms: Timing/Verification 



 06/04  verifying linked list is O(1) 



 Wiki note: 



 [https://charlesreid1.com/wiki/Linked_Lists/Java/Timing](https://charlesreid1.com/wiki/Linked_Lists/Java/Timing) 



 06/1006/11  verifying tree operations are O(1) 



 [https://charlesreid1.com/wiki/Trees/Operations_Performance](https://charlesreid1.com/wiki/Trees/Operations_Performance) 



 Books: 



 Goodrich (both Java and Python books) discuss bigO timing for data structures 



 Several end of chapter questions address timing/complexity 


@ 246,13 +347,27 @@ o 







 







### Types of Problems 







[ ] Algorithms: NP, NPComplete, Approximation 







### Types of Solutions 







[ ] Algorithm/Solution Taxonomy 







### Recursion 







[ ] Algorithms: Recursion 







[ ] Search Algorithms 



[ ] Search Algorithms: Sequential search 



[ ] Search Algorithms: Binary search 



[ ] Algorithms: Backtracking 







### Search 







[ ] Sequential search 







[ ] Binary search 







### Sort 







[ ] Sort Algorithms 



[ ] Algorithms: Selection sort 


@ 260,8 +375,13 @@ o 



[ ] Algorithms: Quick sort 



[ ] Algorithms: Heap sort 







### Strings 







[ ] String algorithms 



[ ] Algorithms: Substring search 



[ ] Pattern Matching 



[ ] Dynamic Compression 



[ ] Tries 







[ ] Graph algorithms 



[ ] Tree algorithms 


@ 296,6 +416,16 @@ o 















### Computational Physics 







[ ] Linear Systems 



[ ] Parallel Algorithms 



[ ] Parallel Optimization 























### Applied 







[ ] Systems: Processing and Threads 


@ 359,3 +489,46 @@ o 



[ ] Garbage Collection 



























<a name="practice"></a> 



## Practice and Applications 











### Project Euler 







Some of the Project Euler questions can be answered with the apt use of a single data structure 



and a simple algorithm. Others take a little more effort. 







Project Euler solutions are all in the git repo at git.charlesreid1.com: 







[https://charlesreid1.com:3000/cs/euler](https://charlesreid1.com:3000/cs/euler) 







The goal there is to complete *at least* 50 Project Euler questions. 







Some of these are documented on the wiki: 







[https://charlesreid1.com/wiki/Project_Euler](https://charlesreid1.com/wiki/Project_Euler) 











### ICPC 







Solutions to ICPC (International Competitive Programming Competition) problems: 







[https://charlesreid1.com:3000/charlesreid1/icpc](https://charlesreid1.com:3000/charlesreid1/icpc) 







Several of these also documented on the wiki: 







[http://charlesreid1.com/wiki/ICPC_PNW_2016](http://charlesreid1.com/wiki/ICPC_PNW_2016) 







[http://charlesreid1.com/wiki/Hilbert_Sort](http://charlesreid1.com/wiki/Hilbert_Sort) 











### Code Jam 







Solutions to Google Code Jam problems: 







[https://charlesreid1.com:3000/charlesreid1/codejam](https://charlesreid1.com:3000/charlesreid1/codejam) 






