Reddit Reddit reviews Algorithm Design

We found 23 Reddit comments about Algorithm Design. Here are the top ones, ranked by their Reddit score.

Computers & Technology
Books
Computer Programming
Programming Algorithms
Algorithm Design
Used Book in Good Condition
Check price on Amazon

23 Reddit comments about Algorithm Design:

u/huck_cussler · 12 pointsr/learnprogramming

As far as books go:

  • CLRS

  • Dasgupta

  • Kleinberg and Tardos

    Those are the standards. Dasgupta is probably the most immediately accessible, followed by K&T, with CLRS the hardest (imo).
u/[deleted] · 11 pointsr/programming

For beginners I would recommend Algorithm Design by Goodrich & Tamassia, or the more Java focused Data Structures & Algorithms in Java by the same authors.

Cranking it up a notch, Algorithm Design by Tardos & Kleinberg is a great accessible text.

As a side, I'm reading Algorithms & Data Structures - The Basic Toolbox which might be free if your school has access to ebooks through Springerlink. I find it excellent for reviewing topics and learning how to design good implementations of the algorithms.

I haven't bothered with TAOCP, but my professors say it's a great algorithm encyclopaedia, which is admittedly useful if your principal interest is algorithm research. CLRS on the other hand is great accessible reference (and textbook) showing some interesting proof techniques, but I find the aforementioned books cover the general breadth of algorithms & data structures in an easier and more accessible manner.

Edit: grammar & comprehension.



u/sanyasi · 11 pointsr/compsci

TAOCP is too hard: its like one of those fantasy wishlist items: the kind of thing every computer scientist wishes they had read but never really has the time to. Some nicer books that are gold standards in their respective fields are:

CLRS (Algorithms)

SICP (Just see the top two amazon reviews)

Kernighan and Ritchie (if you want to be a pretty accomplished C programmer and have little to no real C experience before)

Since you mentioned security, Ross Anderson's Security Engineering is a fantastic read, and very easy to parse: you could read it through in less than a week and have a deeply changed view of the structural issues in security: there is little crypto in the book (for that, Schneier is the gold standard) but more discussion about protocols, where protocols fail, real-world protocols like the military classification scheme, etc. It is absolutely fantastic. If you read this and Schneier you'd have a very thorough understanding of the entire security stack.

Kleinberg and Tardos is a much easier read than CLRS when it comes to algorithms, doesn't cover as much, and is very graceful in its explanations. Personally, I love it.

u/theootz · 6 pointsr/cscareerquestions

TL;DR Improve yourself, invest in your future, don't worry about the mistakes...read the books listed at bottom, and practice!

Few months ago I royally fucked up an interview at Microsoft. A really simple question. But I had no experience doing coding on paper instead of a computer.

I spent a lot of time studying various books and paper coding to make sure it wouldn't happen again.

I then had an interview for another (in my mind at the time) dream job. I did fine for all the phone interviews and they flew me over to the west coast for an in person interview for the day. I did well for the first bit until they started pulling out dynamic programming and integer programming questions on me and expecting me. Once again something I didn't prepare for, and f'd up. Didn't get this job either. For the longest time I was really hard on myself at fucking up on both these interviews one after another. Especially this second one since a lot more was riding on it than just the job (another story).

But then I decided I didn't want to have this sort of experience again and expected better of myself. I made myself further improve and brush up on all those concepts as well. Did a few mock interviews with friends, spent some time working on interview type questions on both the computer and on paper. A month or two later I started interviewing again. By this point I was an interviewing machine - and I'm now able to do just about anything thrown at me. I've had my choice of employers and until just recently, was in the situation where I had so many offers I didn't know which one I wanted most. I'll be heading to silicon valley soon at one of the top tech companies in the world with a fantastic offer considering I just graduated.

The point is - learn from the mistakes and improve yourself. I realize you don't want to be that guy spending heaps of time coding outside of work or whatever... but this is an investment in yourself and your career. Do it once, and then just brush up on your skills from time to time. Get into the interviewing mindset and just rock them so you can have your choice of job - and then you can go about your thing once you have the job locked. The up front investment will be worth it!

Things that helped me:

  • www.hackerrank.com - practiced a lot of questions on here
  • www.careercup.com - another great site for questions
  • Cracking the Coding Interview More help on questions, but also some great insights into the interview process for the larger tech companies and many hints and tips on how to go about solving the more complex problems
  • Code Complete A great book for helping you to refresh or learn about software design
  • Eternally Confuzzled Great resource to learn how to think about common data structures and algorithms

    Having trouble with Algorithm design/analysis? These are some of the go-to books for that:

  • The Algorithm Design Manual Probably the defacto for learning about algorithm design and analysis
  • Introduction to Algorithms A great book with many different algorithms and data structures to learn about
  • Algorithm Design A great book if you want to dive deeper into more complex subjects like graph theory, dynamic programming, search algorithms, etc.. etc..
u/the_omega99 · 5 pointsr/compsci

You should mention more specifically what kinds of problems you're looking for. Do you want to merely implement well known algorithms? Design novel algorithms for specific problems? Analyze the efficiency of a given algorithm?

For the first two possibilities that I listed, you should not need solutions (and there's no single way to write code and many algorithm problems have multiple solutions). Instead, you should be writing test suites that can let you know when they code works. This isn't 100% perfect because it's always possible that there'll be some edge case that you'll miss (although test suites should be rigorous to try and avoid this), but it'll do well for most cases and is how you'd work in the real world.

And of course, you can always try and formally prove novel algorithms work. There's isn't really an easy way to check for answers here, though, since there's more than one way to prove many algorithms (and some algorithms are extremely complicated to prove). So there isn't really anything you can do besides having a more experienced person check your answers. If you have a low volume of questions, Reddit might be able to help (find specific subreddits). But otherwise expect to have to pay for a tutor (if you're in school, your university might have something free available for CS help).

As for some actual advice, I thought Kleinberg's Algorithm Design was very good for creating novel algorithms. It has lots of problems. No answers, though.

You're right that it's pretty hard to find quality books that come with solutions (even if it's just one solution to a problem that has many possible solutions). It seems that most texts of a reasonable quality are targeted towards universities and thus don't make answers available so that universities can use the problems in assignments. I wish more books would do something like giving answers to even numbered problems. It's a major pain in the ass for those who would try and self-learn something.

u/craiig · 5 pointsr/compsci

I agree, CLSR is too much like a dictionary and not enough like a story. For my graduate algorithms course, we used Algorithm Design by Kleinberg and Tardos. I could actually read this book because they took the words to explain the formulas they used. I'd recommend it! Not only did I learn about algorithms, but it also helped with reading formulas. Website Amazon Link

That said, they focused more on algorithms than on data structures, so this might not be for you.

u/ontoillogical · 4 pointsr/compsci

The Sipser book mentioned elsewhere is pretty much all of those topics. You may also be interested in a good algorithms book. CLRS has been recommended elsewhere, but Kleinberg & Tardos is probably more accessible. I am using both in school right now, and I find CLRS as a better reference (more breadth) and K&T better for exposition.

u/mighty-byte · 3 pointsr/AskReddit

As other mentionned, your question is pretty hard to answer on a post, even if it is pretty interesting. But having done a bit of research in discrete math & algorithm design and being a math lover myself, I'll try to talk about why I find my area interesting.

Being a software developper, you should pretty much know what an algorithm is. Given a problem, an algorithm is a recipe/step-by-step set of instructions that, if followed exactly, solves your problem. Algorithms can be classified in a lot of categories: deterministic algorithms (given some input, you always get the same right answer), probabilistic algorithms (you get the right answer 'on average'), approximation algorithms (you get an answer that is within some (provable) factor of the optimal answer) and so on. The main measure (there are multiple others) for the performance of an algorithm is the time it takes to find an answer with respect to the size of the input you are giving it. For example, if your problem is to search through an unordered list of n items for a given item, then the trivial solution (look at every item) takes time n. This is what we call linear in n, but algorithms can run logarithmic in n (takes time log(n) ) (very fast), exponential in n (c^n for some c) (very slow) or polynomial in n (n^k for some k) (efficient).

So the fun part is to find THE best algorithm for your problem. For a particular problem, one may ask how fast can the best algorithm run. Well surprisingly, it turns out that some problems will never admit an efficient EXACT solution. I'll give an example of such problem, and then come to the main point of my discussion.

Consider a graph/network (we love these things in discrete math), which is basically a set of points/nodes/vertices that are connected by links/edges, and its size is usually the number of nodes (the maximum number of edges of a (simple) graph is n^2 - the maximum number of pairs you can make with n elements). The Internet is the best example : nodes are webpages and edges are hyperlinks between theses pages. We say that two nodes are neighbors if they are connected by an edge. A fundamental problem of discrete mathematics goes as follows: what is the minimum number k such that you can color the nodes of a graph with k colors such that not two neighboring nodes share the same color? (http://en.wikipedia.org/wiki/Graph_coloring). It turns out that this problem can be proven to be inherently hard - if we can find an efficient deterministic algorithm (we strongly believe we can't) to solve this problem, than there is an efficient (=fast) algorithm to solve many "hard" problems (ex.: proving a theorem, or solving a sudoku ! - probably not going to happen). Such hard problems are said to be NP-complete. It also turn out that most real life (interesting) problems are also that kind of hard (http://en.wikipedia.org/wiki/List_of_NP-complete_problems).

This sounds quite desperate. However, here is where the research starts. It is said that these NP-complete problems cannot have efficient DETERMINISTIC and EXACT algorithms. Nothing prevents us from producing randomized and approximate solutions. So with some clever analysis, input from other areas (read algebra, geometry, probability, ...) and other tricks, some algorithms are built to find solutions that are usually within a good factor of the optimal. Hell, some NP-complete problems (i.e. Knapsack Problem) even admit an arbitrarly precise efficient algorithm. How is this possible? Reading required!

I don't know of non-scholar books that covered this subject, but if you are motivated, here are the books I suggest:

u/timmense · 3 pointsr/cscareerquestions
u/fireatx · 2 pointsr/algorithms

Not either of those, but I can vouch for Algorithm Design. Really innovative practice problems, and they provide some really awesome, novel explanations for concepts.

u/JAPH · 2 pointsr/compsci

$50 for the 2006 edition? I'm not sure I would count that as "incredibly expensive".

But yes, the CLRS is a must-have. Almost every intermediate-high level algorithms course I've seen at any university uses the CLRS.

I've also used Kleinberg's Algorithm Design back for some 200-level algorithms course.

u/benkitty · 2 pointsr/learnprogramming

Kleinberg Tardos is an excellent, if more recent, book that emphasizes theory. It's especially good with reductions to graph algorithms, since the two authors are arguably some of the best graph theorists alive.

u/e_vampire · 2 pointsr/compsci

Either Introduction to Algorithms

or Algorithm Design

Those books were the textbooks for the algorithm and data structures courses, respectively during my bachelor and master's degree in computer science, I find both of them really well written.

u/rafiss · 2 pointsr/AskComputerScience

I think these lecture slides are great. They are meant to go along with the book Algorithm Design, which does have a few sample chapters available. The slides and book do a good job of coming up with understandable, and often practical, examples.

u/markgraydk · 2 pointsr/algorithms

I liked Algorithm Design. It's not really that more advanced but does a good job at expanding on the design and use of algorithms. It's good for bridging that gap from a theoretical course based off Cormen to real-life application of algorithms, which I think is a problem many CS students run into.

u/_Valkryst · 1 pointr/learnprogramming

Ignore the book at the following link unless you want to be bored to death. It may be useful if you want to learn a little bit about Greedy Algorithms, Dynamic Programming, etc... and a few problems/solutions for each, but the book is terribly written.

http://www.amazon.ca/gp/product/0321295358

u/zaken · 1 pointr/programming

The one we used in undergrad was Kleinberg and Tardos

u/sgt_fred_colon_ankh · 1 pointr/learnprogramming

"Algorithm Design" by Kleinberg and Tardos (https://www.amazon.com/Algorithm-Design-Jon-Kleinberg/dp/0321295358) is a good textbook. It's actually readable. Most algorithms textbooks are more like reference books ... helpful when you already know algorithms and want to look something up, but not helpful to teach it to you.

There are some slides based on the book here (http://www.cs.princeton.edu/~wayne/kleinberg-tardos/) which could be useful too.

u/LazyAnt_ · 1 pointr/cscareerquestions

I just saw your edit. Since you are not looking for books just like Grokking Algorithms, I will suggest another amazing book on algorithms.

https://www.amazon.co.uk/Algorithm-Design-Jon-Kleinberg/dp/0321295358

Algorithm Design by Kleinberg and Tardos. I thoroughly enjoyed it and I highly recommend it to anyone interested in algorithms. One of my favourites.

u/PasswordIsntHAMSTER · 1 pointr/cscareerquestions

You're missing concurrent programming, alternative paradigms and algorithms.

u/JustThe-Q-Tip · 1 pointr/learnprogramming

www.geeksforgeeks.org is nice, in lieu of specific books. Lots of practice problems, lots of explanations, which I think are key to learning the stuff. A bit of linear text can certainly help, in case you want justifications for certain concepts, but you're usually better off keeping that light and as-needed, and jumping into problems as soon as possible. Break your brain and rebuild stronger.

And... https://www.reddit.com/r/learnprogramming/wiki/books

Oh and one text I don't see mentioned is Algorithm Design by Kleinberg and Tardos.

u/cheerfulloser · 1 pointr/learnprogramming

The top things that you're tested on during interviews are:

  1. proficiency/skill with your primary programming language
  2. algorithms
  3. data structures

    It looks like you're well on your way to #1. I am not a .NET developer, so can't help much there.

    However, here're my suggestions for #2 and #3

    algorithms - CLRS is a standard book for algorithms in university courses (http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844). However, I found the book a bit of a dull read. It might be better to start off with this book instead (http://www.amazon.com/Algorithm-Design-Jon-Kleinberg/dp/0321295358)

    Data structures - I don't have a specific book in mind but I suggest looking up Amazon reviews and getting a highly rated book.

    The reason algorithms and data structures are tested heavily is because you want to write an efficient algorithm/solution for your work projects & tasks. Depending on the situation, having a good eye for determining the appropriate data structure and algorithm is a must.