|
|
|
|
@@ -1,7 +1,7 @@
|
|
|
|
|
# TODO List - Software Engineering
|
|
|
|
|
|
|
|
|
|
Table of Contents:
|
|
|
|
|
* [Data Structures](#Data Structures)
|
|
|
|
|
* [Data Structures](#data-structures)
|
|
|
|
|
* [Arrays](#arrays)
|
|
|
|
|
* [Linked Lists](#ll)
|
|
|
|
|
* [Stacks and Queues](#sq)
|
|
|
|
|
@@ -12,10 +12,7 @@ Table of Contents:
|
|
|
|
|
* [Search Trees](#searchtrees)
|
|
|
|
|
* [Graphs](#graphs)
|
|
|
|
|
* [Advanced Data Structures (Skiena)](#adv)
|
|
|
|
|
* [Data Structures and Libraries](#lib)
|
|
|
|
|
* Guava
|
|
|
|
|
* Apache Commons
|
|
|
|
|
* Others
|
|
|
|
|
* [Study Guides](#studyguides)
|
|
|
|
|
* [Algorithms](#algorithms)
|
|
|
|
|
* [Complexity and Big O Notation](#bigO)
|
|
|
|
|
* [Timing](#timing)
|
|
|
|
|
@@ -28,16 +25,17 @@ Table of Contents:
|
|
|
|
|
* [OOP](#oop)
|
|
|
|
|
* [Java](#java)
|
|
|
|
|
* [Practice and Applications](#practice)
|
|
|
|
|
* [Blogging and Wrtiting](#blogging)
|
|
|
|
|
* [Blogging and Writing](#blogging)
|
|
|
|
|
* [Project Euler](#euler)
|
|
|
|
|
* [ICPC](#icpc)
|
|
|
|
|
* [Google Code Jam](#codejam)
|
|
|
|
|
* [Engineering Interview Notes](#interview-notes)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<a name="data_structures"></a>
|
|
|
|
|
<a name="data-structures"></a>
|
|
|
|
|
## Data Structures
|
|
|
|
|
|
|
|
|
|
<a name="arrays"></a>
|
|
|
|
|
@@ -81,7 +79,6 @@ Table of Contents:
|
|
|
|
|
- Fisher Yates [https://charlesreid1.com/wiki/Arrays/Java/FisherYates](https://charlesreid1.com/wiki/Arrays/Java/FisherYates)
|
|
|
|
|
- Python list [https://charlesreid1.com/wiki/Arrays/Java/PythonList](https://charlesreid1.com/wiki/Arrays/Java/PythonList)
|
|
|
|
|
- Removing elements
|
|
|
|
|
|
|
|
|
|
- Code:
|
|
|
|
|
- Python-style list in Java: [https://charlesreid1.com:3000/cs/java/src/master/arrays/python-list/PythonList.java](https://charlesreid1.com:3000/cs/java/src/master/arrays/python-list/PythonList.java)
|
|
|
|
|
- Usage of the Array data type: [https://charlesreid1.com:3000/cs/java/src/master/arrays](https://charlesreid1.com:3000/cs/java/src/master/arrays)
|
|
|
|
|
@@ -111,7 +108,7 @@ Table of Contents:
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
[ ] Linked lists: Python
|
|
|
|
|
[X] Linked lists: Python
|
|
|
|
|
- Singly liked lists: 06/04
|
|
|
|
|
- Books:
|
|
|
|
|
- Goodrich Python Chapter 7
|
|
|
|
|
@@ -120,7 +117,6 @@ Table of Contents:
|
|
|
|
|
- [https://charlesreid1.com/wiki/Linked_Lists](https://charlesreid1.com/wiki/Linked_Lists)
|
|
|
|
|
- [https://charlesreid1.com/wiki/Linked_Lists/Python](https://charlesreid1.com/wiki/Linked_Lists/Python)
|
|
|
|
|
- [https://charlesreid1.com/wiki/Linked_Lists/Python/Single](https://charlesreid1.com/wiki/Linked_Lists/Python/Single)
|
|
|
|
|
- End of chapter questions:
|
|
|
|
|
- Code:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -138,8 +134,6 @@ Table of Contents:
|
|
|
|
|
- Wiki notes:
|
|
|
|
|
- [https://charlesreid1.com/wiki/StacksQueues](https://charlesreid1.com/wiki/StacksQueues)
|
|
|
|
|
- [https://charlesreid1.com/wiki/StacksQueues/Python](https://charlesreid1.com/wiki/StacksQueues/Python)
|
|
|
|
|
- End of chapter questions:
|
|
|
|
|
- (none)
|
|
|
|
|
- Code:
|
|
|
|
|
- Python: [https://charlesreid1.com:3000/cs/python/src/master/stacks-queues-deques/](https://charlesreid1.com:3000/cs/python/src/master/stacks-queues-deques/)
|
|
|
|
|
- Array-based stack: [https://charlesreid1.com:3000/cs/python/src/master/stacks-queues-deques/stacks/ArrayStack.py](https://charlesreid1.com:3000/cs/python/src/master/stacks-queues-deques/stacks/ArrayStack.py)
|
|
|
|
|
@@ -164,9 +158,6 @@ Table of Contents:
|
|
|
|
|
- [https://charlesreid1.com/wiki/StacksQueues/Java/LinkedStack](https://charlesreid1.com/wiki/StacksQueues/Java/LinkedStack)
|
|
|
|
|
- [https://charlesreid1.com/wiki/StacksQueues/Java/LinkedQueue](https://charlesreid1.com/wiki/StacksQueues/Java/LinkedQueue)
|
|
|
|
|
- [https://charlesreid1.com/wiki/StacksQueues/Java/LinkedDeque](https://charlesreid1.com/wiki/StacksQueues/Java/LinkedDeque)
|
|
|
|
|
- End of chapter questions:
|
|
|
|
|
- Goodrich
|
|
|
|
|
- To do
|
|
|
|
|
- Implementations/Code:
|
|
|
|
|
- Array based stack: [https://charlesreid1.com:3000/cs/java/src/master/stacks-queues-deques/stacks/ArrayStack.java](https://charlesreid1.com:3000/cs/java/src/master/stacks-queues-deques/stacks/ArrayStack.java)
|
|
|
|
|
- Array based queue: [https://charlesreid1.com:3000/cs/java/src/master/stacks-queues-deques/queues/ArrayQueue.java](https://charlesreid1.com:3000/cs/java/src/master/stacks-queues-deques/queues/ArrayQueue.java)
|
|
|
|
|
@@ -196,13 +187,12 @@ Table of Contents:
|
|
|
|
|
- Goodrich trees coverage includes patterns, abstract methods
|
|
|
|
|
- Wiki notes:
|
|
|
|
|
- [https://charlesreid1.com/wiki/Template:TreesFlag](https://charlesreid1.com/wiki/Template:TreesFlag)
|
|
|
|
|
- End of chapter questions:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[ ] Trees: Java
|
|
|
|
|
[X] Trees: Java
|
|
|
|
|
- 06/10 - 06/13, 06/15 - 06/16
|
|
|
|
|
- Books:
|
|
|
|
|
- Goodrich Java Chapter 8
|
|
|
|
|
@@ -218,13 +208,14 @@ Table of Contents:
|
|
|
|
|
- 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.
|
|
|
|
|
- The 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.
|
|
|
|
|
- Sorted trees:
|
|
|
|
|
- Not covered in the Goodrich book...??
|
|
|
|
|
- See Skiena for coverage...
|
|
|
|
|
- Weiss C++ book also has good coverage.
|
|
|
|
|
- Sorted trees means balanced trees, and balanced trees introduces myriad strategies.
|
|
|
|
|
- Sorted trees means balanced trees
|
|
|
|
|
- Balanced trees introduces myriad strategies.
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
@@ -243,9 +234,9 @@ Table of Contents:
|
|
|
|
|
- Timing Notes:
|
|
|
|
|
- Spent a lot of time wrestling with the sorted and unsorted implementations. The unsorted was *way* slower than expected.
|
|
|
|
|
- Not sure what's going on. Need to go through and implement them according to the book.
|
|
|
|
|
- Finally got classes worked out, 6/22. Better-documented process. Documentation could still use some improvement. Consolidation still an issue.
|
|
|
|
|
- Finally got classes worked out, 6/22.
|
|
|
|
|
- Better-documented process. Documentation could still use some improvement. Consolidation still an issue.
|
|
|
|
|
- Package? Thinking like you are building an API. Maven.
|
|
|
|
|
- End of chapter questions:
|
|
|
|
|
- Git Code:
|
|
|
|
|
- Non-tree sorted/unsorted priority queues: use a built-in list data type
|
|
|
|
|
- [https://charlesreid1.com:3000/cs/java/src/master/priority-queues/AbstractPriorityQueue.java](https://charlesreid1.com:3000/cs/java/src/master/priority-queues/AbstractPriorityQueue.java)
|
|
|
|
|
@@ -256,15 +247,23 @@ Table of Contents:
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[ ] Trees: heap trees
|
|
|
|
|
[X] Trees: heap trees
|
|
|
|
|
- 06/23
|
|
|
|
|
- Books:
|
|
|
|
|
- Goodrich Python/Java books covering priority queue theory/concepts
|
|
|
|
|
- Online videos:
|
|
|
|
|
- [Heaps and heap sort (MIT 6.006)](https://www.youtube.com/watch?v=B7hVxCmfPtM)
|
|
|
|
|
- Wiki notes:
|
|
|
|
|
- Binary search trees
|
|
|
|
|
- Heap sort
|
|
|
|
|
- Java Priority queues: [https://charlesreid1.com/wiki/Priority_Queues/Java](https://charlesreid1.com/wiki/Priority_Queues/Java)
|
|
|
|
|
- Priority queue ADT: [https://charlesreid1.com/wiki/Priority_Queues/ADT](https://charlesreid1.com/wiki/Priority_Queues/ADT)
|
|
|
|
|
- Priority queue (stored in sorted order): [https://charlesreid1.com/wiki/Priority_Queues/Sorted](https://charlesreid1.com/wiki/Priority_Queues/Sorted)
|
|
|
|
|
- Priority queue (stored in unsorted order): [https://charlesreid1.com/wiki/Priority_Queues/Unsorted](https://charlesreid1.com/wiki/Priority_Queues/Unsorted)
|
|
|
|
|
- Heaps: [https://charlesreid1.com/wiki/Priority_Queues/Heap](https://charlesreid1.com/wiki/Priority_Queues/Heap)
|
|
|
|
|
- Heaps with Java: [https://charlesreid1.com/wiki/Priority_Queues/Java](https://charlesreid1.com/wiki/Priority_Queues/Java)
|
|
|
|
|
- Custom comparators with priority queues: [https://charlesreid1.com/wiki/Priority_Queues/Comparators](https://charlesreid1.com/wiki/Priority_Queues/Comparators)
|
|
|
|
|
- End of chapter questions:
|
|
|
|
|
- Git Code
|
|
|
|
|
- max oriented priority queue: [https://charlesreid1.com/wiki/Maximum_Oriented_Priority_Queue](https://charlesreid1.com/wiki/Maximum_Oriented_Priority_Queue)
|
|
|
|
|
- stack implementation of pq: [https://charlesreid1.com/wiki/Priority_Queues/Stack](https://charlesreid1.com/wiki/Priority_Queues/Stack)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -278,26 +277,26 @@ Table of Contents:
|
|
|
|
|
[ ] Dictionaries/Maps/Hash Tables
|
|
|
|
|
- 06/02 - 06/03 - Skiena advanced data structures
|
|
|
|
|
- 06/19 - 06/21 - Goodrich book
|
|
|
|
|
- 06/23 - 06/25 - Videos
|
|
|
|
|
- Books:
|
|
|
|
|
- Skiena Chapter 3
|
|
|
|
|
- Goodrich Chapter 10 - FIRST HALF
|
|
|
|
|
- Online Videos:
|
|
|
|
|
- MIT 6.006 Intro to Algorithms: Erik Demaine
|
|
|
|
|
- [Lecture 8: Hashing with chaining](https://www.youtube.com/watch?v=0M_kIqhwbFo)
|
|
|
|
|
- [Lecture 9: Table doubling](https://www.youtube.com/watch?v=BRO7mVIFt08)
|
|
|
|
|
- [Hashing with chaining (MIT 6.006)](https://www.youtube.com/watch?v=0M_kIqhwbFo)
|
|
|
|
|
- [Table doubling (MIT 6.006)](https://www.youtube.com/watch?v=BRO7mVIFt08)
|
|
|
|
|
- [Open addressing, crypto hashing (MIT 6.006)](https://www.youtube.com/watch?v=rvdJDijO2Ro&index=10&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
|
|
|
|
|
- [Randomization: universal hashing, perfect hashing (MIT 6.046)](https://www.youtube.com/watch?v=z0lJ2k0sl1g)
|
|
|
|
|
- Wiki notes:
|
|
|
|
|
- End of chapter questions:
|
|
|
|
|
- [https://charlesreid1.com/wiki/Hash_Functions](https://charlesreid1.com/wiki/Hash_Functions)
|
|
|
|
|
- [https://charlesreid1.com/wiki/Maps](https://charlesreid1.com/wiki/Maps)
|
|
|
|
|
- [https://charlesreid1.com/wiki/Maps_in_Java](https://charlesreid1.com/wiki/Maps_in_Java)
|
|
|
|
|
- Git code:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<a name="hash"></a>
|
|
|
|
|
## Hash Tables
|
|
|
|
|
|
|
|
|
|
[ ] Hash tables: (Detail topic?)
|
|
|
|
|
|
|
|
|
|
- [https://charlesreid1.com:3000/cs/java/src/master/hash](https://charlesreid1.com:3000/cs/java/src/master/hash)
|
|
|
|
|
- Map interface: [https://charlesreid1.com:3000/cs/java/src/master/hash/Map.java](https://charlesreid1.com:3000/cs/java/src/master/hash/Map.java)
|
|
|
|
|
- AbstractMap class: [https://charlesreid1.com:3000/cs/java/src/master/hash/AbstractMap.java](https://charlesreid1.com:3000/cs/java/src/master/hash/AbstractMap.java)
|
|
|
|
|
- Unsorted array map: [https://charlesreid1.com:3000/cs/java/src/master/hash/UnsortedArrayMap.java](https://charlesreid1.com:3000/cs/java/src/master/hash/UnsortedArrayMap.java)
|
|
|
|
|
- Exploring hash functions: [https://charlesreid1.com:3000/cs/java/src/master/hash/HashFunctions.java](https://charlesreid1.com:3000/cs/java/src/master/hash/HashFunctions.java)
|
|
|
|
|
- Exploring hashCode() function: [https://charlesreid1.com:3000/cs/java/src/master/hash/ObjectHashCode.java](https://charlesreid1.com:3000/cs/java/src/master/hash/ObjectHashCode.java)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
@@ -309,6 +308,21 @@ Table of Contents:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[ ] Sets and Skip Lists
|
|
|
|
|
- 06/26 - 06/30
|
|
|
|
|
- Books:
|
|
|
|
|
- Goodrich Chapter 10 - SECOND HALF
|
|
|
|
|
- Online videos:
|
|
|
|
|
- [Randomization: skip lists (MIT 6.046)](https://www.youtube.com/watch?v=2g9OSRKJuzM)
|
|
|
|
|
- Other code:
|
|
|
|
|
- phishman data structures code
|
|
|
|
|
- Wiki notes:
|
|
|
|
|
- [https://charlesreid1.com/wiki/Skip_Lists](https://charlesreid1.com/wiki/Skip_Lists)
|
|
|
|
|
- [https://charlesreid1.com/wiki/Java/ConcurrentSkipList](https://charlesreid1.com/wiki/Java/ConcurrentSkipList)
|
|
|
|
|
- [https://charlesreid1.com/wiki/SkipList](https://charlesreid1.com/wiki/SkipList)
|
|
|
|
|
- TODO - need to finish the implementation notese at the last link
|
|
|
|
|
- Git code:
|
|
|
|
|
- SkipList class: [https://charlesreid1.com:3000/cs/java/src/master/hash/SkipList.java](https://charlesreid1.com:3000/cs/java/src/master/hash/SkipList.java)
|
|
|
|
|
- TODO - need to implement a timing class for SkipList
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
@@ -317,25 +331,58 @@ Table of Contents:
|
|
|
|
|
<a name="searchtrees"></a>
|
|
|
|
|
### Search Trees
|
|
|
|
|
|
|
|
|
|
[ ] Trees: binary search trees
|
|
|
|
|
[ ] Trees: search trees (binary, AVL, splay, 2-4, heap)
|
|
|
|
|
- 07/01 - 07/03
|
|
|
|
|
- Books:
|
|
|
|
|
- Goodrich Chapter 11
|
|
|
|
|
- Online Videos:
|
|
|
|
|
- [Binary search trees (MIT 6.006)](https://www.youtube.com/watch?v=9Jry5-82I68)
|
|
|
|
|
- [AVL trees (MIT 6.006)](https://www.youtube.com/watch?v=FNeL18KsWPc&index=6&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)
|
|
|
|
|
- [B-Trees insertion and sort](https://www.youtube.com/watch?v=k5J9M5_IMzg)
|
|
|
|
|
- Wiki notes:
|
|
|
|
|
- Binary search trees [https://charlesreid1.com/wiki/Binary_Search_Trees](https://charlesreid1.com/wiki/Binary_Search_Trees)
|
|
|
|
|
- Binary search tree navigation
|
|
|
|
|
- Binary search tree insertion and deletion
|
|
|
|
|
- OOP: Hooks, virtual method alternatives, positions vs nodes, key-value pairs
|
|
|
|
|
- AVL search tree
|
|
|
|
|
|
|
|
|
|
[ ] Trees: balanced search trees
|
|
|
|
|
|
|
|
|
|
[ ] Trees: red black trees
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<a name="graphs"></a>
|
|
|
|
|
### Graphs
|
|
|
|
|
|
|
|
|
|
[ ] Graphs: directed and undirected
|
|
|
|
|
|
|
|
|
|
[ ] Graphs: Adjacency Matrix and List Representations of Graphs
|
|
|
|
|
|
|
|
|
|
[ ] Graphs: Traversals (BFS, DFS)
|
|
|
|
|
[ ] Graphs
|
|
|
|
|
- Books:
|
|
|
|
|
- Goodrich Chapter 14
|
|
|
|
|
- Wiki notes:
|
|
|
|
|
- Graph theory:
|
|
|
|
|
- Definitions: [https://charlesreid1.com/wiki/Graphs/Definitions](https://charlesreid1.com/wiki/Graphs/Definitions)
|
|
|
|
|
- Matching: [https://charlesreid1.com/wiki/Graphs/Matching](https://charlesreid1.com/wiki/Graphs/Matching)
|
|
|
|
|
- Connectivity: [https://charlesreid1.com/wiki/Graphs/Connectivity](https://charlesreid1.com/wiki/Graphs/Connectivity)
|
|
|
|
|
- First theorem of graph theory: [https://charlesreid1.com/wiki/First_Theorem_of_Graph_Theory](https://charlesreid1.com/wiki/First_Theorem_of_Graph_Theory)
|
|
|
|
|
- Implementations:
|
|
|
|
|
- Data structures: [https://charlesreid1.com/wiki/Graphs/Data_Structures](https://charlesreid1.com/wiki/Graphs/Data_Structures)
|
|
|
|
|
- Adjacency matrix:
|
|
|
|
|
- Adjacency list:
|
|
|
|
|
- Adjacency map: [https://charlesreid1.com/wiki/Graphs/Java/Adjacency_Map](https://charlesreid1.com/wiki/Graphs/Java/Adjacency_Map)
|
|
|
|
|
- Edge list:
|
|
|
|
|
- Guava: [https://charlesreid1.com/wiki/Graphs/Guava](https://charlesreid1.com/wiki/Graphs/Guava)
|
|
|
|
|
- Algorithms:
|
|
|
|
|
- Traversal: [https://charlesreid1.com/wiki/Graphs/Traversal](https://charlesreid1.com/wiki/Graphs/Traversal)
|
|
|
|
|
- BFS: [https://charlesreid1.com/wiki/Graphs/Breadth_First_Traversal](https://charlesreid1.com/wiki/Graphs/Breadth_First_Traversal)
|
|
|
|
|
- DFS: [https://charlesreid1.com/wiki/Graphs/Depth_First_Traversal](https://charlesreid1.com/wiki/Graphs/Depth_First_Traversal)
|
|
|
|
|
- Finding cycles: [https://charlesreid1.com/wiki/Graphs/Finding_Cycles](https://charlesreid1.com/wiki/Graphs/Finding_Cycles)
|
|
|
|
|
- Connected components: [https://charlesreid1.com/wiki/Graphs/Finding_Connected_Components](https://charlesreid1.com/wiki/Graphs/Finding_Connected_Components)
|
|
|
|
|
- Reachability: [https://charlesreid1.com/wiki/Graphs/Reachability](https://charlesreid1.com/wiki/Graphs/Reachability)
|
|
|
|
|
- Transitive closure: [https://charlesreid1.com/wiki/Graphs/Transitive_Closure](https://charlesreid1.com/wiki/Graphs/Transitive_Closure)
|
|
|
|
|
- Floyd Warshall: [https://charlesreid1.com/wiki/Graphs/Floyd_Warshall](https://charlesreid1.com/wiki/Graphs/Floyd_Warshall)
|
|
|
|
|
- Shortest path: [https://charlesreid1.com/wiki/Graphs/Shortest_Path](https://charlesreid1.com/wiki/Graphs/Shortest_Path)
|
|
|
|
|
- Edge relaxation: [https://charlesreid1.com/wiki/Graphs/Edge_Relaxation](https://charlesreid1.com/wiki/Graphs/Edge_Relaxation)
|
|
|
|
|
- Dijkstra: [https://charlesreid1.com/wiki/Graphs/Dijkstra](https://charlesreid1.com/wiki/Graphs/Dijkstra)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -353,9 +400,6 @@ Table of Contents:
|
|
|
|
|
- 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,
|
|
|
|
|
@@ -363,22 +407,42 @@ only the core of each data structure, basic operations and big-O analysis.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<a name="studyguides"></a>
|
|
|
|
|
### Study Guides
|
|
|
|
|
|
|
|
|
|
[ ] Data structures study guides
|
|
|
|
|
- Arrays study guide - finished 7/5
|
|
|
|
|
- [https://charlesreid1.com/wiki/Arrays_Study_Guide](https://charlesreid1.com/wiki/Arrays_Study_Guide)
|
|
|
|
|
- Lists study guide - finished 7/5
|
|
|
|
|
- [https://charlesreid1.com/wiki/Lists_Study_Guide](https://charlesreid1.com/wiki/Lists_Study_Guide)
|
|
|
|
|
- Stacks and queues study guide - finished 7/55
|
|
|
|
|
- [https://charlesreid1.com/wiki/Stacks_Queues_Study_Guide](https://charlesreid1.com/wiki/Stacks_Queues_Study_Guide)
|
|
|
|
|
- Priority queues/heaps study guide - finished 7/6
|
|
|
|
|
- [https://charlesreid1.com/wiki/Priority_Queues_Study_Guide](https://charlesreid1.com/wiki/Priority_Queues_Study_Guide)
|
|
|
|
|
- Hash tables study guide - finished 7/6
|
|
|
|
|
- [https://charlesreid1.com/wiki/Hash_Tables_Study_Guide](https://charlesreid1.com/wiki/Hash_Tables_Study_Guide)
|
|
|
|
|
- Trees study guide - finished 7/7
|
|
|
|
|
- [https://charlesreid1.com/wiki/Trees_Study_Guide](https://charlesreid1.com/wiki/Trees_Study_Guide)
|
|
|
|
|
- Maps and sets study guide - finished 7/9
|
|
|
|
|
- [https://charlesreid1.com/wiki/Maps_and_Sets_Study_Guide](https://charlesreid1.com/wiki/Maps_and_Sets_Study_Guide)
|
|
|
|
|
- Search trees study guide - finished 7/9
|
|
|
|
|
- [https://charlesreid1.com/wiki/Search_Trees_Study_Guide](https://charlesreid1.com/wiki/Search_Trees_Study_Guide)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<a name="lib"></a>
|
|
|
|
|
## Data Structures Libraries
|
|
|
|
|
|
|
|
|
|
Some libraries that provide data structures in Java.
|
|
|
|
|
|
|
|
|
|
### Guava
|
|
|
|
|
|
|
|
|
|
[ ] Google Guava Library
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
### Apache Commons
|
|
|
|
|
|
|
|
|
|
[ ] Apache Commons Library
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
* Guava - [https://charlesreid1.com/wiki/Graphs/Guava](https://charlesreid1.com/wiki/Graphs/Guava)
|
|
|
|
|
* Apache Commons
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -390,6 +454,7 @@ Some libraries that provide data structures in Java.
|
|
|
|
|
|
|
|
|
|
[X] Algorithm complexity and big-oh notation
|
|
|
|
|
- 05/26, 05/27
|
|
|
|
|
- Revisiting 7/15
|
|
|
|
|
- Books:
|
|
|
|
|
- Goodrich et al: Data Structures and Algorithms in Python
|
|
|
|
|
- Skiena: Algorithm Design Manual
|
|
|
|
|
@@ -435,21 +500,60 @@ Some libraries that provide data structures in Java.
|
|
|
|
|
|
|
|
|
|
[ ] Algorithms: Backtracking
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<a name="search"></a>
|
|
|
|
|
### Search
|
|
|
|
|
|
|
|
|
|
[ ] Sequential search
|
|
|
|
|
|
|
|
|
|
[ ] Binary search
|
|
|
|
|
- 07/16
|
|
|
|
|
- Books:
|
|
|
|
|
- Skiena Chapter 4
|
|
|
|
|
- Useful variations on binary search
|
|
|
|
|
- Basic principle of search: sorting is easy and is something algorithm designers should always try
|
|
|
|
|
- Binary search is possible once you have a sorted array
|
|
|
|
|
- End of chapter questions:
|
|
|
|
|
- Skiena chapter 4 question solutions on wiki
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<a name="sort"></a>
|
|
|
|
|
### Sort
|
|
|
|
|
|
|
|
|
|
[ ] Sort Algorithms
|
|
|
|
|
[ ] Algorithms: Selection sort
|
|
|
|
|
- 07/13-07/15 - Skiena
|
|
|
|
|
- Books:
|
|
|
|
|
- Skiena Chapter 4
|
|
|
|
|
- Merge sort, selection sort, heap sort, insertion sort, and quick sort covered
|
|
|
|
|
- Focus is on utility of sorting for enabling algorithm design
|
|
|
|
|
- Wiki notes:
|
|
|
|
|
- [https://charlesreid1.com/wiki/Algorithms/Sort](https://charlesreid1.com/wiki/Algorithms/Sort)
|
|
|
|
|
- [https://charlesreid1.com/wiki/Algorithmic_Analysis_of_Sort_Functions](https://charlesreid1.com/wiki/Algorithmic_Analysis_of_Sort_Functions)
|
|
|
|
|
|
|
|
|
|
Fast:
|
|
|
|
|
[ ] Algorithms: Merge sort
|
|
|
|
|
[ ] Algorithms: Quick sort
|
|
|
|
|
[ ] Algorithms: Heap sort
|
|
|
|
|
[ ] Algorithms: Quick sort
|
|
|
|
|
|
|
|
|
|
Slower:
|
|
|
|
|
[ ] Algorithms: Selection sort
|
|
|
|
|
[ ] Algorithms: Insertion sort
|
|
|
|
|
|
|
|
|
|
### Divide and Conquer
|
|
|
|
|
|
|
|
|
|
[ ] Divide and Conquer algorithm approach
|
|
|
|
|
- Several MIT lectures from 07/01-07/15
|
|
|
|
|
- 07/13-07/15 - Skiena
|
|
|
|
|
- Books:
|
|
|
|
|
- Skiena Chapter 4
|
|
|
|
|
- Divide and conquer algorithms
|
|
|
|
|
- Master theorem
|
|
|
|
|
- (Light on explanation of the Master Theorem)
|
|
|
|
|
- Wiki notes:
|
|
|
|
|
- [https://charlesreid1.com/wiki/Divide_and_Conquer](https://charlesreid1.com/wiki/Divide_and_Conquer)
|
|
|
|
|
- [https://charlesreid1.com/wiki/Divide_and_Conquer/Master_Theorem](https://charlesreid1.com/wiki/Divide_and_Conquer/Master_Theorem)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<a name="strings"></a>
|
|
|
|
|
### Strings
|
|
|
|
|
@@ -514,21 +618,15 @@ Some libraries that provide data structures in Java.
|
|
|
|
|
|
|
|
|
|
(For full list, see CS flag on wiki)
|
|
|
|
|
|
|
|
|
|
[ ] Interfaces, Abstract Classes, Virtual Methods
|
|
|
|
|
|
|
|
|
|
[ ] Interfaces
|
|
|
|
|
|
|
|
|
|
[ ] Testing (Unit testing)
|
|
|
|
|
|
|
|
|
|
[ ] Timing
|
|
|
|
|
|
|
|
|
|
[ ] Memory Usage
|
|
|
|
|
|
|
|
|
|
[ ] Garbage Collection
|
|
|
|
|
|
|
|
|
|
[ ] Lambda functions
|
|
|
|
|
|
|
|
|
|
[ ] Decorators
|
|
|
|
|
Java topics:
|
|
|
|
|
* Interfaces, Abstract Classes, Virtual Methods
|
|
|
|
|
* Interfaces
|
|
|
|
|
* Testing (Unit testing)
|
|
|
|
|
* Timing
|
|
|
|
|
* Memory Usage
|
|
|
|
|
* Garbage Collection
|
|
|
|
|
* Lambda functions
|
|
|
|
|
* Decorators
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -576,27 +674,31 @@ Notes:
|
|
|
|
|
- Part 2 - Solution
|
|
|
|
|
- Part 3 - Code
|
|
|
|
|
- blog post: [http://charlesreid1.github.io/cse-143-final-project-hilbert-sort-1-the-problem.html](http://charlesreid1.github.io/cse-143-final-project-hilbert-sort-1-the-problem.html)
|
|
|
|
|
- git code:
|
|
|
|
|
- git code: [https://charlesreid1.com:3000/cs/finalproject-143/src/master/hilbert/HilbertSort.java](https://charlesreid1.com:3000/cs/finalproject-143/src/master/hilbert/HilbertSort.java)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[ ] Project Euler Blogging
|
|
|
|
|
* Even Fibonacci numbers - performance, comparisons of methods to get Fib numbers, some maths
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 07/14 - continued fractions
|
|
|
|
|
- Even Fibonacci numbers - performance, comparisons of methods to get Fib numbers, some maths
|
|
|
|
|
- Continued fractions
|
|
|
|
|
- Published 07/14
|
|
|
|
|
- blog post: part 1: newton's method [http://charlesreid1.github.io/computing-square-roots-part-1-using-newtons-method.html](http://charlesreid1.github.io/computing-square-roots-part-1-using-newtons-method.html)
|
|
|
|
|
- blog post: part 2: continued fractions: [http://charlesreid1.github.io/computing-square-roots-part-2-using-continued-fractions.html](http://charlesreid1.github.io/computing-square-roots-part-2-using-continued-fractions.html)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Timing and performance:
|
|
|
|
|
* Results of big-O computations and verifications
|
|
|
|
|
- Results of big-O computations and verifications
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
OOP:
|
|
|
|
|
* Data structures, checklists, and cheat sheets
|
|
|
|
|
- Data structures, checklists, and cheat sheets
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Other ideas:
|
|
|
|
|
* Mind maps of concepts and relations, plus links and code
|
|
|
|
|
* Helpful YouTube videos and projects they lead to
|
|
|
|
|
* Particularly insightful mathematical questions,
|
|
|
|
|
* Post-chapter questions and answers
|
|
|
|
|
- Mind maps of concepts and relations, plus links and code
|
|
|
|
|
- Helpful YouTube videos and projects they lead to
|
|
|
|
|
- Particularly insightful mathematical questions,
|
|
|
|
|
- Post-chapter questions and answers
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -611,6 +713,10 @@ Notes:
|
|
|
|
|
[ ] Project Euler
|
|
|
|
|
- 06/14 - 06/17
|
|
|
|
|
- 06/23 - Decathlete (first 10 solved)
|
|
|
|
|
- 07/01-07/02 - up to 15, 51, 100, 500
|
|
|
|
|
- 07/04 - 16, 17, 52, 53, 100
|
|
|
|
|
- 07/08 - 501 (sink)
|
|
|
|
|
- 07/10-07/13 - 500 thru 502 (more sinks)
|
|
|
|
|
- Wiki notes:
|
|
|
|
|
- [https://charlesreid1.com/wiki/Project_Euler](https://charlesreid1.com/wiki/Project_Euler)
|
|
|
|
|
- Git code:
|
|
|
|
|
@@ -638,3 +744,91 @@ Solutions to Google Code Jam problems:
|
|
|
|
|
|
|
|
|
|
[https://charlesreid1.com:3000/charlesreid1/code-jam](https://charlesreid1.com:3000/charlesreid1/code-jam)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<a name="interview-notes"></a>
|
|
|
|
|
## Engineering Interview Notes
|
|
|
|
|
|
|
|
|
|
Link: [https://www.youtube.com/watch?v=ko-KkSmp-Lk](https://www.youtube.com/watch?v=ko-KkSmp-Lk)
|
|
|
|
|
|
|
|
|
|
Algorithms:
|
|
|
|
|
* Discuss space and time complexity
|
|
|
|
|
* System design and OOP
|
|
|
|
|
|
|
|
|
|
Resume:
|
|
|
|
|
* Be prepared to prove what is on your resume
|
|
|
|
|
|
|
|
|
|
Design questions:
|
|
|
|
|
* Work with your interviewer
|
|
|
|
|
|
|
|
|
|
Analysis questions:
|
|
|
|
|
* Ensure you understand all aspects of the problem
|
|
|
|
|
* Give multiple solutions
|
|
|
|
|
|
|
|
|
|
Code questions:
|
|
|
|
|
* Be able to come up with efficient code in a short amount of time
|
|
|
|
|
|
|
|
|
|
Coding:
|
|
|
|
|
* Be familiar with at least one coding language (C++ or Java)
|
|
|
|
|
* APIs
|
|
|
|
|
* OO design
|
|
|
|
|
* How to test
|
|
|
|
|
* Corner cases and edge cases
|
|
|
|
|
|
|
|
|
|
Algorithms:
|
|
|
|
|
* Time and space complexity
|
|
|
|
|
* How to improve or change
|
|
|
|
|
|
|
|
|
|
Data structures:
|
|
|
|
|
* As many as humanly possible
|
|
|
|
|
|
|
|
|
|
Testing:
|
|
|
|
|
* Unit testing
|
|
|
|
|
* Corner cases, edge cases
|
|
|
|
|
* End to end integration tests
|
|
|
|
|
* Security tests
|
|
|
|
|
|
|
|
|
|
NP Complete
|
|
|
|
|
* What does NP complete actually *mean*?
|
|
|
|
|
* TSP
|
|
|
|
|
* Knapsack problem
|
|
|
|
|
* Recognize these when they are presented in alternate forms
|
|
|
|
|
|
|
|
|
|
Math:
|
|
|
|
|
* Discrete math problems
|
|
|
|
|
* Counting, probability, combinatorics
|
|
|
|
|
|
|
|
|
|
Recursion:
|
|
|
|
|
* Practice
|
|
|
|
|
|
|
|
|
|
Operating systems:
|
|
|
|
|
* Processes, threads, concurrency issues
|
|
|
|
|
* Semaphores, mutexes, locks
|
|
|
|
|
* Resource allocation
|
|
|
|
|
* Context switching - an issue with the operating system and underlying hardware
|
|
|
|
|
* Scheduling
|
|
|
|
|
|
|
|
|
|
System design:
|
|
|
|
|
* Knowledge, theory, judgement for real world code
|
|
|
|
|
* Class hierarchies, distributed systems, design of systems under constraints
|
|
|
|
|
|
|
|
|
|
The Internet:
|
|
|
|
|
* Routers, domains, servers, load balancers, firewalls
|
|
|
|
|
* How search works
|
|
|
|
|
|
|
|
|
|
Tips:
|
|
|
|
|
* Explain and clarify - even if discarding ideas, vocalize the process
|
|
|
|
|
* Clarification: "Are there time or space complexity requirements?"
|
|
|
|
|
* Keep thinking through the problem - the first solution is not the best, so come up with more
|
|
|
|
|
* Practice physically writing your code
|
|
|
|
|
* Should be bug free
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|