Thomas H. Cormen is the co-author of Introduction to Algorithms, along with Charles Leiserson, Ron Rivest, and Cliff Stein. He is a Full Professor of computer science at Dartmouth College and currently Chair of the Dartmouth College Writing Program.
This book is a gem. Extremely well written, not dry, yet precise. It covers many important algorithms and intuitions behind their design and timings. At a little over 200 pages, 10 chapters, the book can realistically be read in about 10 days in its entirety. I am reading the book as part of preparation for a technical interview. It is wonderful in this context. I've been familiar with 99% of the algorithmic concepts this book discusses for years, and yet details not used daily are eventually forgotten. Many of us are (vaguely?) familiar with all the classic sorting algorithms, but can we code them correctly on a whiteboard in reasonable time w/o off-by-one errors and such? I think the author has perfectly hit a sweet spot of importance, completeness and precision in a package that is very readable. I truly recommend this book to people who need to prepare for a software engineer interview.
This book is great as a first introduction to the formal study of algorithms. It assumes no prior knowledge of algorithms analysis and a pretty basic knowledge of mathematics. The author succeeds in explaining some complicated concepts simply for the (more or less) lay reader. As for me, I studied this to whet my appetite before plunging headfirst into the massive tome that is CLRS.
I had been asked, at one point, to recommend an algorithm book to a layman.
While I was wavering between O'Reilly's odd "Algorithms in a Nutshell" and the quite good (but more technical) "Algorithms" by Dasgupta/Papadimitriou/Vazirani, this book by Cormen came out. I blasted through it on the beach during vacation and found it perfect.
This is a book for people interested in how computers (or computer programmers) solve problems. It quite naturally requires a mathematical inclination, but unlike most algorithm books, it relies on description and reasoning rather than equations to illustrate the concepts.
It is difficult to determine the target audience for this book. If you've read THE book on Algorithms (i.e., Cormen's other book), then you'll gain little from reading this.
If you would like a better grasp of how programmers approach problems, perhaps as a journalist, manager, or co-worker, then this will probably be worth reading.
Any junior or self-taught programmer who finds standard algorithm texts too difficult should consider this book a must-read.
And finally, for the layman who is curious, or who wants to learn a new style of problem-solving (perhaps having exhausted books by the likes of Zeitz or Michalewicz), this book will prove to be both readable and thought-provoking.
If you've never read a book on algorithms and don't have enough time to go into 1000+ pages of CLRS ("Introduction to Algorithms"), this book is for you. In 10 short chapters (total of 240 pages), it goes through no more than 20 algorithms in just enough detail so you get the gist. It's not just merge-sort and bubble-sort either – it goes into string matching, compression, paths in graphs and even NP-completeness.
It will give you a taste of a beautiful subject and leave you wanting more.
This book serves as a soft introduction to algorithms and how they work to solve real world problems,without any of the mathematical rigor. In that sense this book is quite useful to someone who is new to programming or simply wants to understand how computer programs or algorithms work. This is not a textbook (the other book ie. introduction to algorithms, coauthored by Cormen is more appropriate) that describes algorithm design techniques and certainly does not contain practice exercises at the end of the book (although there are handy citations). Rather than mathematical proofs, the author employs simple analogies and reasoning to explain the works of the algorithms. I think the chapters on shortest path algorithms, sorting and string algorithms are quite adequate as a way of introduction.
As the author exclaims in the preface, if you get this algorithm joke you are pretty much half way there to understanding algorithm outlines:
Did you hear about the computer scientist who got stuck in the shower? He was washing his hair and following the instructions on the shampoo bottle. They read "Lather. Rinse. Repeat."
This is the kind of book one wants to keep coming back to. It is a crisp account of the different algorithms that run the world. A very easy read. The visceral treatment makes this book an introductory text. I highly recommend this to anyone interested in knowing about algorithms.
This is one of the best books I have read on algorithms, entry level and highly digestible and the book itself is structured effectively chapter by chapter. I loved the fact that the author used pseudocode to describe the algorithm logics which made the the explanations much more focused on the logic.
As mentioned, it’s entry level, touches the basics such as binary search, sorting algorithms, etc. but it gets into medium to advanced category a bit in the last a few chapters where it touches NP-hard problems and graph algorithms.
The book is good to see some algorithms without mathematical demonstration. If you want to remember how they works or if you never see algorithms before. For me was nice to read in a few pages to remember things. Although I was thinking that the book was to see problems or algorithms applied without to much maths.
There is a part at the end speaking about the what are the problems open. In general it is interesting to read but not what I was looking for.
Decided to start reviewing books that I read to create a habit of summarising my thoughts about the book, reflect a bit, and practice posting in Engish.
----- I am a software engineer and I am lacking (after this book it should be better) a good understanding of algorithms. My first thoughts are that this book is one of those that you can label as a fundamental book. It's got described almost every most popular software algorithm used today step by step. It's got an explanation of Big O notation and how it's calculated. And obviously, it's got a ton of references to lectures and the big book Introduction to Algorithms for further study.
Although I understood something around 40-50% of the material due to a lack of math theory, it is a good start, and it was quite fruitful to spend time reading this book.
This book gives a great overview of a broad variety of topics in algorithms, and supplies a decent amount of technical detail in the form of pseudocode and some fairly meaty proof outlines (enough to prepare for a more comprehensive text, such as CLRS). Somehow, I found the section on PERT charts almost as difficult as puzzling through the reduction of 3-CNF to the subset sum problem... I think the examples presented in those sections served to muddy the technique required, unlike the clarity provided by other examples in the book (running through the examples for algorithms on strings in chapter 7 was challenging yet rewarding!) I'm definitely going to return to this book to keep my knowledge of basic techniques sharp!
This book is great for anyone looking to get an idea of how computer algorithms are used to solve problems and how algorithms are compared with one another. It's very approachable and clearly conveys the key insights for important algorithms and even makes spaces to describe how some problems are not solvable for computers beyond some small inputs or not solvable at all.
More of a 3.75. Some parts were incredibly tough to read for someone from a non computer science background. Took two attempts to finish reading. However, it definitely whet the appetite for a deeper dive on algorithms.
I'm pretty openly a CLRS hater (I respect it for what it is, but it has a lot of issues and there are far superior options for the subject), but thought this would be a nicer "intro" to the tome.
I'm 100% convinced most of the good reviews didn't even read the book past the intro and first chapter (some of the reviews clearly read the book, and for those who enjoyed it: good for you.)
Every chapter has a similar structure: 1) An example problem is provided (for example, using a directed graph to show the proper order for putting on a goalie uniform in hockey, or a bookshelf of various books). 2) The example has good descriptions and pictures showing how they map to the data structure in question (a directed graph in the case of the hockey uniform, or an array in the case of the books). It's very easy to get a mental model of what is being introduced. 3) An algorithm concerning the data structure is introduced with bad pseudocode (very similar to CLRS if you have any prior experience with that. 1 indexed arrays. You've been warned). 4) The earlier example is discarded completely. The algorithm itself is now explained using math jargon with horribly named variables. (Example: A[p], A[q], etc.). 5) Repeat.
Another thing that really irked me was in the section about the run times of various sorting algorithms. "Regular" and randomized quicksort were tested, but only "Regular" was provided on the chart. "Randomized quicksort was the champion for n >= 64 on both computers", yet the results weren't included at all, but a later modified randomized quicksort + insertion sort results were.
From the intro: "I don't assume you've ever written or even read a computer program."
Yet linked lists are suddenly brought up out of nowhere on page 79 with no visual aids for an unassuming reader. I know what a linked list is, but if I didn't I'd be beyond lost based on the description provided. A more discerning reader might stop and look up a linked list at that point, but that kind of defeats the point of the book entirely.
NOTE: I've used this book as a refresher for basic algorithms. I did not need explanations for how XYZ works - I've rather used it as a bullet points on what to refresh from different sources including my own notes, code snippets etc.
BUT! I have no idea what audience this books targets? Author claims that he tried to avoid code snippets to make it more approachable to non-technical folks but that is so untrue! If you want to make it approachable to non-tech (and also tech!) people, you'd have a lot of diagrams, step by step visualizations of algorithms, data structures and so on. There are of course some attempts to do so but the way things like Quicksort are presented made me cry. If you write a book, that tries to be concise and focused, yet you force even technical audience to reach out for other algo books like (my favourite) Sedgewick's Algorithms, you know you've failed. Idea of building some sort of instinctive understanding of how things work (like divide and conquer algos) is a clever (and probably right one) but delivery was - in my humble opinion - poor.
Don't bother buying this book. Buy CLRS or my favourite "Algorithms" by Sedgewick. Although it was cheap to buy polish version of it, I do regret buying it anyway.
正文 前 对这本书的第一印象就是,它真的在努力降低很多门槛,它降低的门槛不只是知识上“前置知识”所产生的门槛,更多的是一种心理上的畏惧所产生的门槛。前面几章看下来,真的有点像一个老奶奶给你读睡前故事哄你睡觉一样的感觉,非常的随和(也读的比较想zzz)。 这种低门槛的方式我觉得挺好的,很多时候不是能力不行,而是自己先退却了,包括阅读英文书籍也是,学了那么多年英语不用来读英语用来考试,真是浪费。 当然,it comes with a cost,那就是它前面真的啰嗦,一个查找能讲几十页,还因为太过啰嗦把我整晕了,不过对于没有程序/算法基础的人来说,也是件好事,比较符合它的定位。
后 说实话,后面的 Cryptography 那章作为科普讲的是真的精彩,读的非常开心,AKS primality test and it's paper "PRIMES is in P", HOLY SHIT, nerd 的浪漫好吧,看的好 suang 哦。 但是,其他的很多地方,我觉得不行,不太喜欢,很多东西是突然提出来,come out of nowhere,讲个几页,几段,讲了点皮毛就没了,挥一挥衣袖,不带走一片云彩,看的云里雾里。 NP and P 那部分前面的科普还行,后面讲的有些迷迷糊糊,模棱两可?就没看完。
总结 虽然看的时候挺开心的,但是看完似乎又没有记住啥(摸头) 这种 bar 很低的科普书有一点不好,就是有时候不得不模棱两可的解释,后面难度高一些之后更能看出来这一点不足,没办法,定位的限制。 相对于隔壁 CLRS ,这本书真是捧你在手心里,还怕你化了(流汗黄豆 没有习题对这本书来说也是加分项吧,就是来看着玩的 总的来说还是比较推荐的。
A good introductory book, especially for those who are new to programming. However, those who already had some previous exposures to algorithms might prefer the more precise and concise pseudocodes than the "wetwares" used by the author.
A whole lotta good stuff. The second half was particularly useful for me. - dags - shortest paths - cryptography - data compression - NP-completeness (mother problem, reduction between problems)
Provides simple and clear explanation. For me, I realize that nothing can beat the practice in learning algorithms. With that in mind, this book was still enjoyable. It will gently guide us to CLRS.
A fantastic warm-up to the "big" algorithms book (Introduction to Algorithms). Perfecto for someone who is just getting started or needs a refresher without getting bogged down in all the details.
Read this for an Algorithms class. The only things I understood from this book were what my teacher already explained much more clearly in class. But hey, at least it was short.