Skip to content
HomeVideosBooks
AllTopicsTrends
BlogsPodcasts
HistoryListsWatch laterLiked videosFollowing

The videos, books, blogs and podcasts Hacker News keeps recommending, all in one place.

VideosBooksBlogsPodcastsAboutPrivacySettings

Data from Hacker News, HackerTube, HackerBooks, HackerBlogs and Open Library. Credits · Not affiliated with Y Combinator.

HomeVideosBooksBlogsPodcasts
Ctrl K
    Cover of Randomized algorithms

    Randomized algorithms

    Rajeev Motwani · 1995

    Computer ScienceData & Statistics
    Open LibraryAmazon
    Stats for nerds
    4recommend
    7mentions
    7people
    2010–2023years
    57% recommend43% neutral

    Mentions per year

    20102012201420162018202020222023

    What Hacker News says

    1. maxovJul 2020
      I'm surprised and delighted to see someone recommend The Discrepancy Method by Chazelle. I love this book, but even beyond it requiring a lot of mathematical prerequisites, I'm not sure of the use to most software engineers. I think only the chapters on sampling, geometric algorithms, minimum spanning trees, and maybe linear programming would be useful references on algorithm design for most software engineers.

      I second the recommendation of Probability and Computing by Mitzenmacher and Upfal. In addition to being much more mathematically self-contained, there is more focus on models and techniques that I imagine software engineers might actually use, e.g. hashing, load balancing.

      In addition, Randomized Algorithms by Motwani and Raghavan is a fantastic book, and should be doable after completing Mitzenmacher and Upfal. It goes into further depth on techinques for designing randomized algorithms.

      A bit orthogonal but still related to the idea of "what should a software engineer read for interesting algorithm ideas", I really like Approximation Algorithms by Shmoys and Williamson. There is some intersection with randomized algorithms there too.

      thread
    2. todd8Oct 2016
      Depending on your level of programming ability, one algorithm a day, IMHO, is completely doable. A number of comments and suggestions say that one per day is an unrealistic goal (yes, maybe it is) but the idea of setting a goal and working through a list of algorithms is very reasonable.

      If you are just learning programming, plan on taking your time with the algorithms but practice coding every day. Find a fun project to attempt that is within your level of skill.

      If you are a strong programmer in one language, find a book of algorithms using that language (some of the suggestions here in these comments are excellent). I list some of the books I like at the end of this comment.

      If you are an experienced programmer, one algorithm per day is roughly doable. Especially so, because you are trying to learn one algorithm per day, not produce working, production level code for each algorithm each day.

      Some algorithms are really families of algorithms and can take more than a day of study, hash based look up tables come to mind. First there are the hash functions themselves. That would be day one. Next there are several alternatives for storing entries in the hash table, e.g. open addressing vs chaining, days two and three. Then there are methods for handling collisions, linear probing, secondary hashing, etc.; that's day four. Finally there are important variations, perfect hashing, cuckoo hashing, robin hood hashing, and so forth; maybe another 5 days. Some languages are less appropriate for playing around and can make working with algorithms more difficult, instead of a couple of weeks this could easily take twice as long. After learning other methods of implementing fast lookups, its time to come back to hashing and understand when its appropriate and when alternatives are better and to understand how to combine methods for more sophisticated lookup methods.

      I think you will be best served by modifying your goal a bit and saying that you will work on learning about algorithms every day and cover all of the material in a typical undergraduate course on the subject. It really is a fun branch of Computer Science.

      A great starting point is Sedgewick's book/course, Algorithms [1]. For more depth and theory try [2], Cormen and Leiserson's excellent Introduction to Algorithms. Alternatively the theory is also covered by another book by Sedgewick, An Introduction to the Analysis of Algorithms [3]. A classic reference that goes far beyond these other books is of course Knuth [4], suitable for serious students of Computer Science less so as a book of recipes.

      After these basics, there are books useful for special circumstances. If your goal is to be broadly and deeply familiar with Algorithms you will need to cover quite a bit of additional material.

      Numerical methods -- Numerical Recipes 3rd Edition: The Art of Scientific Computing by Tuekolsky and Vetterling. I love this book. [5]

      Randomized algorithms -- Randomized Algorithms by Motwani and Raghavan. [6], Probability and Computing: Randomized Algorithms and Probabilistic Analysis by Michael Mitzenmacher, [7]

      Hard problems (like NP) -- Approximation Algorithms by Vazirani [8]. How to Solve It: Modern Heuristics by Michalewicz and Fogel. [9]

      Data structures -- Advanced Data Structures by Brass. [10]

      Functional programming -- Pearls of Functional Algorithm Design by Bird [11] and Purely Functional Data Structures by Okasaki [12].

      Bit twiddling -- Hacker's Delight by Warren [13].

      Distributed and parallel programming -- this material gets very hard so perhaps Distributed Algorithms by Lynch [14].

      Machine learning and AI related algorithms -- Bishop's Pattern Recognition and Machine Learning [15] and Norvig's Artificial Intelligence: A Modern Approach [16]

      These books will cover most of what a Ph.D. in CS might be expected to understand about algorithms. It will take years of study to work though all of them. After that, you will be reading about algorithms in journal publications (ACM and IEEE memberships are useful). For example, a recent, practical, and important development in hashing methods is called cuckoo hashing, and I don't believe that it appears in any of the books I've listed.

      [1] Sedgewick, Algorithms, 2015. https://www.amazon.com/Algorithms-Fourth-Deluxe-24-Part-Lect...

      [2] Cormen, et al., Introduction to Algorithms, 2009. https://www.amazon.com/s/ref=nb_sb_ss_i_1_15?url=search-alia...

      [3] Sedgewick, An Introduction to the Analysis of Algorithms, 2013. https://www.amazon.com/Introduction-Analysis-Algorithms-2nd/...

      [4] Knuth, The Art of Computer Programming, 2011. https://www.amazon.com/Computer-Programming-Volumes-1-4A-Box...

      [5] Tuekolsky and Vetterling, Numerical Recipes 3rd Edition: The Art of Scientific Computing, 2007. https://www.amazon.com/Numerical-Recipes-3rd-Scientific-Comp...

      [6] https://www.amazon.com/Randomized-Algorithms-Rajeev-Motwani/...

      [7]https://www.amazon.com/gp/product/0521835402/ref=pd_sim_14_2...

      [8] Vazirani, https://www.amazon.com/Approximation-Algorithms-Vijay-V-Vazi...

      [9] Michalewicz and Fogel, https://www.amazon.com/How-Solve-Heuristics-Zbigniew-Michale...

      [10] Brass, https://www.amazon.com/Advanced-Data-Structures-Peter-Brass/...

      [11] Bird, https://www.amazon.com/Pearls-Functional-Algorithm-Design-Ri...

      [12] Okasaki, https://www.amazon.com/Purely-Functional-Structures-Chris-Ok...

      [13] Warren, https://www.amazon.com/Hackers-Delight-2nd-Henry-Warren/dp/0...

      [14] Lynch, https://www.amazon.com/Distributed-Algorithms-Kaufmann-Manag...

      [15] Bishop, https://www.amazon.com/Pattern-Recognition-Learning-Informat...

      [16] Norvig, https://www.amazon.com/Artificial-Intelligence-Modern-Approa...

      thread
    3. woosterAug 2010
      For those who were confused (as I was), Prabhakar Raghavan wasn't the one who recently died, it was his co-author in Randomized Algorithms, Rajeev Motwani.

      BTW, I highly recommend their book. In it is all the evidence of the genesis of Google.

      thread
    4. counterpointerJun 2013
      You didn't include the real big guy of Google(who died in an unfortunate accident later) who was Brin's and Page's professor and mentor.

      From http://en.wikipedia.org/wiki/Rajeev_Motwani

      Motwani joined Stanford soon after U.C. Berkeley. Motwani was one of the co-authors (with Larry Page and Sergey Brin, and Terry Winograd) of an influential early paper on the PageRank algorithm, the basis for Google's search techniques. He also co-authored another seminal search paper What Can You Do With A Web In Your Pocket with those same authors.[3]

      He was also an author of two widely-used theoretical computer science textbooks, Randomized Algorithms (Cambridge University Press 1995, ISBN 978-0-521-47465-8, with Prabhakar Raghavan) and Introduction to Automata Theory, Languages, and Computation (2nd ed., Addison-Wesley, 2000, with John Hopcroft and Jeffrey Ullman).

      Prior to his involvement with Google, Motwani founded the Mining Data at Stanford project (MIDAS), an umbrella organization for several groups looking into new and innovative data management concepts. His research included data privacy, web search, robotics, and computational drug design

      thread
    5. lliiffeeJun 2010
      Your second point may be valid, though not literally. I've implemented quicksort, and I used (pseudo) random pivots, damnit! :)

      The article you point to doesn't seem to address the complexity of quicksort with random pivots. However, that is proven to be expected O(n log n) time for any data in Motwani's Randomized Algorithms book, and I don't think the correctness of that has ever been questioned.

      thread
    6. pbiggarJun 2010
      > The article you point to doesn't seem to address the complexity of quicksort with random pivots.

      That paper is about experimental algorithmics, and avoids discussions of things which aren't practical (such as using truly random pivots).

      > However, that is proven to be expected O(n log n) time for any data in Motwani's Randomized Algorithms book, and I don't think the correctness of that has ever been questioned.

      Right, but since there are no truly random quicksorts, its hardly a concern.

      thread

    Related

    Cover of Probability and Computing
    2011–2025

    Probability and Computing

    Michael Mitzenmacher
    4 recommend · 8
    Cover of Distributed algorithms
    2012–2024

    Distributed algorithms

    Nancy A. Lynch
    3 recommend · 6
    Cover of An introduction to the analysis of algorithms
    2013–2025

    An introduction to the analysis of algorithms

    Robert Sedgewick
    3 recommend · 6
    Cover of Introduction to Algorithms
    2007–2026

    Introduction to Algorithms

    Thomas H. Cormen
    274 recommend · 880
    Cover of Algorithms for Optimization
    2020–2025

    Algorithms for Optimization

    Mykel J. Kochenderfer
    5 recommend · 13
    Cover of The algorithm design manual
    2007–2026

    The algorithm design manual

    Steven S. Skiena
    195 recommend · 321
    Cover of Algorithms
    2007–2026

    Algorithms

    Robert Sedgewick
    50 recommend · 100
    Cover of Introduction to Probability
    2010–2022

    Introduction to Probability

    Dimitri P. Bertsekas
    7 recommend · 8