Hi /sci/ !!!
I want to intern to $BIGCOMPANY but haven't reached the Algorithms course in my university yet, so I'm taking this course in Algorithms and Data Structures.
The approach is practical: they have coded a small text editor and want students to implement extra features.
So basically they're going to explain you stuff like tree and tries and how they are used to implement, say, word completion, and then you can complete the simple text editor with such features.
I like this approach /sci/, what is your opinion?
Can you suggest me some more courses/books on interesting subjects which follow a similar approach ?
Can't you implement them without the extra hand holding?
For Data Structure:
>Data Structures and Algorithms in C++ by Drozdek
For Algorithms with implementation details:
>Algorithms in C++ Parts 1-5: Fundamentals, Data Structures, Sorting, Searching, and Graph Algorithms by Sedgewick
I learn way better by doing actual coding that by mere theoretical study.
My approach would be to take this mooc now and study all of the details of various algorithms and data structures later when i reach the algorithms and data structure course at my university.
You will do almost no programming in this course. It is very near worthless. If you want to play with the big boys, look into the pair of courses titled "Design and Analysis of Algorithms" done by Tim Roughgarden at Stanford. This would be a much better use of your time. You will get both the theory and be expected to code everything you do from scratch.
>I learn way better by doing actual coding that by mere theoretical study.
The one phrase that ruined academia forever
>First universities: We will teach only mathematics, philosophy and art. Scientists will do math and then specialize in their field. Soft 'sciencists' will study philosophy and then specialize. Artists of all stripes will learn art and then specialize.
WHOOPS! TURNS OUT PEOPLE ARE TOO RETARDED FOR THIS
>*sweating* Okay, now we don't have such a simple organization but that is fine. Now we have expanded all faculties. For example, because people were too retarded to apply their math we will now teach math, physics, chemistry and biology so people won't have to learn to apply shit on their own. Now they will be pleased. People who want to be engineers will go through math and/or physics and then specialize.
WHOOPS! ENGINEERS TOO RETARDED!
>*tired as fuck of fixing schedules* Okay, people are too stupid to apply math and physics on their own. Behold! The engineering faculty! Here we will teach the retards how to apply shit on their own so that they don't have to put even minimal effort in understanding anything. T-this will please them, right?
--Period when science starts advancing really fast
>Worry not. People who can't to do computer science will just study mathematics and then specialize. Of course.
>Worry not, people who want to get into antrophysics will learn physics and specialize.
>Worry not, people who want to do aerospace engineering will just do mechanical engineering and then specialize
>Worry not, people who want to do statistics will just do mathematics and then specialize
>Worry not, people who want to do robotics will just learn electrical engineering and then specialize.
>Worry not, people who want to do computer engineering will just learn electrical engineering and then specialize
NO THEY CAN'T BECAUSE THEY ARE RETARDED
>Now every uni has 200 faculties with 20 different majors in
Ok. So looking more into that, I've decided that your curriculum is on the mid to low level of basic.
Here is an extensive list of suggested algorithms I would look into. Each delimited with what category of algo they belong to. If google ever foobars you. You'll get a handful of the more complicated ones in this list.
>Aho Corasick algorithms
>Manachar’s algorithm O(n)
>Multi dimensional pattern matching.
>Searching and preprocessing Regular Expressions consisting of ‘?’ , ‘*’.
Basic Graphs [beginner]
>BiconnectedComponents, Finding articulation points and bridges].
> Floyd Warshall algorithm
> Flood fill algorithm
> Bellman Ford algorithm.
Flow networks/matching etc etc.
>Maximum flow using Ford Fulkerson Method.
>Maximum flow using Dinics Algorithm.
>Maximum weighted Bipartite Matching(KuhnMunkrasalgorithm/HungarianMethod)
>Stoer Wagner mincut algorithm.
>Hopcroft Karp bipartite matching algorithm.
>Maximum matching in general graph(blossomshrinking)
>Gomory Hu Trees.
>Chinese Postman Problem.
Basic Comp Geometry
>Online Construction of convex hull
>Bently Otman algorithm
>Rotating Calipers technique
>Line sweep/Plane sweep
>Area of union of circles
>Delayunay Triangulation of n points
>Voronoi Diagrams of n points
>Point in a Polygon problem
Dynamic Programming Approaches
>State space reduction
>Solving in reverse
>DP on probability spaces
>DP on trees
>Symmetric characterization of DP state
>Just read through Cormen's section on this.
Number Theory(Mix of algos and concepts you should understand)
Number theory [VERY SIMPLE]
>Euler totient theorem
>Chinese remainder theorem
>Prime generation(Seive of Erasthetes)
>GCD (Euclidean method)
>Read 2.3 from Number Theory SYYan
>Read 1.9 from Cormen
>Sprague grundy theorem,
>Matrix multiplication (how to determine order of operations using DP. This is explained in Cormen)
>Using Matrix exponentiation to solve recurrences
>Eigen Values and decomposition
>Latent semantic Indexing(Bonus)
>Roots of a polynomial
Basic Data Structures[what you go over in your class]
>Singly/Doubly Linked List
>Circular Linked Lists
>Disjoint data structures
>Fenwick Binary indexed heaps
>Range Minimum Query
>B / B+ trees
>Red Black trees.
It is overwhelming. In CS undergrad most people go through about a 1/5 of this list.