Algorithms Unlocked (Mit Press)
A**N
Best overall "motivated learner" book on Algorithms
I am reading lot of algorithms books lately due to rekindled interest (the last time I am this motivated is during my high school days!) and the common advice is to read CLRS (C for Cormen) but the book is a 500 pound gorilla and it is neck deep in detailed Math. Imagine my delight when I stumbled on "Algorithms Unlocked" by Cormen - I call this book Baby Cormen. My background is in software engineering and I am paying my dues for 10+ years. I like math but am not in touch with it for many years; though I am currently taking steps to remedy it. So that’s the context. Here goes my review:Pros1. It has a section on "Algorithms on Strings". Out of many books that I perused (Algorithms in a nutshell, Skiena, Eva Tardos etc.), this book, CLRS, Algorithms by Sedgwick has a section on Strings. There are dedicated books on String algorithms but "string problems" appear practically in almost every software engineer's career that I think any general algorithms book should cover a basic portion of it. This one does.2. Chatty but neither boring nor tedious. It uses enough words to convey the concept efficiently.3. It contains math for sections on complexity but algorithm concepts are supported with pictures, sample algorithm runs. One just needs to follow logical arguments as it is explained.4. All the chapters except last few pages in chapter 9, 10 are gems.5. The length of the book is ~222. This cannot be overstated. The faster u reach towards the end of the book the better you will feel about yourself and the more you will like to finish it.6. Pretty good paper quality and print. Love this about MIT press.7. Price is cheap.8. No exercises. Yes this is a good thing actually. It would have affected the flow of the book. If you need exercises then go to Big Cormen (CLRS).Cons1. Typos/Errors. 14 when I counted. I actually thought it cannot have any because some reviewer here said it was copyedited by someone who is a stickler for perfection so I didn't bother to check the errata page (my bad but only 14 errata’s is still impressive) until I stumbled on a possible typo (it turns out it is not) and tried to contact the author by going to the book's website. One should make sure to correct it in the book before reading.2. Chapter 9 - section on LZW compression/decompression could have been little clearer. Chapter 10 - section on Hamiltonian cycle to Hamiltonian path reduction, subset sum reduction could have been little clearer because the explanation had more gaps in logic than usual. The author did say in the preface that he couldn't control getting into more details near the very end of the book but I felt the explanation was unclear because it is rushed than more technical details are employed.All in all this is a solid book that treats you as an intelligent human being than a space alien or a brick.
M**1
Ok if you remember abstract HS math; no concrete implementation examples
Admittedly, I'm not finished with it yet & may revise this review later on... So far I've read up through the Sorting chapters.As stated in other reviews & in the book's intro, the author assumes no prior programming knowledge.It's confusing to consider Arrays as starting a 1 & having to add/subtract everywhere, but ok I can deal with it...What wasn't clear at purchase time was the assumption of familiarity with math at let's say "Algebra II" or pre-calc levels.If you don't understand or remember how to deal with factorials, polynomials, exponents & logarithms, you'll need to look those up.These are not particularly difficult or high-level, but my last prolonged exposure to these concepts was more than a decade ago.I do appreciate the need to keep the concepts abstract enough to apply across various applications, but it would be nice to see some concrete implementation. I'd have a much easier time following code examples in a language/syntax I've seen more recently.I'm considering the "Algorithms 4th Ed" book by Sedgewick & Wayne for that reason: practical application w/examples in Java.Modern programming best practices described in books like "The Pragmatic Programmer" or "Code Complete" also clearly emphasize the need to use unique/meaningful names for variables and functions so that people can easily follow your work. It also helps YOU to follow your own work. This book instead takes you back to math class where everything is a meaningless jumble of alphabet soup - "x,y,z,q,p,r,a" - and you have to constantly bounce back & forth (sometimes over several pages) to keep track of what's what.Which example gives you a better idea what's going on?:sortedBooksArray[0] = unsortedBooksArray[x]... OR ...A[q-1] = R[p]Yes, algorithms should be abstract, but if the goal is to explain them clearly they need to first be presented in a concrete way.This is why so many people hate & don't understand math - those who love & understand it fail to describe the practical uses for it in understandable terms. The notation & abstraction work against the stated goal of making algorithms more accessible.Perhaps that's by design, because I'm going to wind up re-writing the psuedocode with my own examples to gain a better understanding. This weekend I will have stacks of books strewn about the living room while I attempt to implement QuickSort for real, and will thereafter come up with some scenarios where I can implement it in code myself. But in that case, I probably could've gotten the same effect from an online tutorial...So far, it's not a bad book - I just haven't really learned anything practical, or that I didn't already know from other online sources that present the topic in a more understandable manner.
J**H
Difficult to read
After seeing all the positive reviews, I had high hopes for this book but didn't enjoy reading it at all. The chapters are dull and dry. Lots of paragraphs that are hard to read and make sense of. Few pictures and even those black and white pictures don't have numbers; so, sometimes it is hard to know which picture the author is talking about.The code examples are not great either. The indexes of arrays start at 1 to make it easier to understand for non-programmers but makes it harder for programmers, and yet it is highly mathematical and abstract even for me as a programmer. I find it hard to believe a non-programmer can read this book and make sense of most of it.
ユ**4
入門書として素晴らしい
アルゴリズムと言えば『CLRS』ですが、1000ページを超えているので、『CLRS』の著者の一人が書いていて、ページ数も200強とかなりお手頃な本書を手に取りました。[本書を読む前の私の知識レベル]- 英語の読み書きは流暢- プログラミングは上級レベル(必然的に、キューやスタックなどのデータ構造も知っている)- アルゴリズムは初級レベル(O(N)やO(log(N))などは知っており、ソート一つにしても様々なアルゴリズムがあることは知っているが、それらの具体的なアルゴリズムは全く知らない。NP困難うんぬんも名前しか知らない。アルゴリズムに関する本も読んだことがない)- 数学は中級レベル(理系大学院卒レベル。グラフ理論も基礎的なことは知っており、DFS、BFS、Union-Findやダイクストラ法くらいは書いたことがある)全ページを読み、全てのアルゴリズムをC++で実装しましたが、ちょうど14日で読了となりました。おそらく100時間程度だと思います。本書は十章立てとなっており、大まかな内容は次の通りです。1. 序論2. 計算複雑性理論(O(N)などの表記の定義)3. ソートと探索に関するアルゴリズム4. 上に同じ5. グラフに関するアルゴリズム6. 上に同じ7. 文字列に関するアルゴリズム8. 暗号化に関するアルゴリズム9. データ圧縮に関するアルゴリズム10. クラスP、クラスNP、NP困難、NP完全に関する理論二章はそれほど長くないのですが、計算複雑性理論について学んだことがない私にとっては、かなりためになりました。O記法、Θ記法、Ω記法などの定義について学ぶことができます。三章と四章は、可もなく不可もなく、だと思います。単純ソートから始まって、最終的にクイックソートに行き着きます。五章と六章も、同様です。動的計画法(DP)を使うアルゴリズムもあり、DPを書いたことがなかったため勉強になりました。七章の対象は文字列です。正規表現(regex)のようなものを想定しましたが、全く違いました。扱われる問題がどれも特殊で、身の回りの応用例が思いつきません。生物学の分野に応用例があるそうですが、一般書で扱う必要があったのかは謎です。個人的には、ハッシュ関数やエラー訂正符号あたりの話が代わりに入っていると良いと思いました。八章は、読み物としてかなり面白いと思います。やや数学色が強めですが、読み切ることをおすすめします。なぜ暗号化が(比較的)簡単なのに復号は極めて難しいのかを、数学的に証明付きで理解することができます。九章も同様です。最後に扱われるLZWというアルゴリズムは、ご存知のgif画像ファイルフォーマットで採用されています。現在も使われるほどに実用的でありながら、実装も簡単です。十章で一気に雰囲気が変わります。アルゴリズムの分類の話になり、全てが抽象化します。個人的にはこの本で一番面白い部分でしたが、実用性とは逸れる部分もあるので、場合によっては"A sampler of NP-complete problems"以降はばっさり切ってしまっても良いと思います。それよりも前の部分は、クラスP,NPやNP完全性などの定義があるので、読むべきです。全体的に再帰を多用するので、再帰の勉強になります。基本的に私は再帰が好きではないのですが、効果的に再帰が使われており、正直感動しました。アルゴリズムとは直接関係ありませんが、この点はかなりの収穫でした。説明は非常に分かりやすく、理解できないほど内容が難しいというわけでもなく、それでいて手応えがあります。「アルゴリズムもプログラムも知っているが、正式な教育を受けたことが無い」という人に心からおすすめします。私はその一人でしたが、理解を深めることができました。------------------------------[注意したほうが良い点]・序論によると、本書が想定する最低レベルの読者は、「数学はそれなりに分かるが、アルゴリズムについては全く知らず、プログラムを書いたことがない人」のようです。ただ、これはさすがに無理があると感じます。・例えば、配列を受け取るアルゴリズムは、どれも配列の長さも受け取るようになっていますが、その理由が全く説明されていません。Cを始めとする低級言語でプログラムを書いたことがあれば、長さをわざわざ指定しなければならない理由を知っているはずですが、プログラミング言語未経験者や、配列の長さを取得する関数が用意されている言語(例えばpythonのlen())しか書いたことがない人からすれば、もやもやしたまま読み進めることになると思います。・ところどころ、定義がいい加減です。例えば、二分木は木の一種であると説明されますが、木の定義がなく、そもそも二分木は木ではなく根付き木の一種です。・アルゴリズムについて全く知らない人にとっては、ややレベルが高いと思います。初心者はおそらく初めから置いていかれます。数学が苦手な人も同様。・アルゴリズムは全て擬似コードで書かれています。現実のプログラミング言語でのサンプルコードのようなものは一切ありません。アルゴリズムを実際に使いたい場合は、自分で実装しなければなりません。
O**R
Un excellent contenu et une posture agaçante
L'auteur de ce livre est évidemment le Cormen de Cormen, Leiserson, Rivest et Stein [CLRS], mais au lieu de 1300 pages cet ouvrage en fait 240. Il joue donc dans la catégorie des livres d'introduction à l'algorithmique et il est excellent dans ce rôle. Même introductif, cet ouvrage reste suffisamment précis, et la réduction de volume s'opère plus par une sélection des sujets que par une perte de finesse d'analyse. Il est comparable en cela à d'autres ouvrages introductifs comme ceux de Baase ou de Levitin, mais en diffère plus par les sujets sélectionnés que par le traitement de ces sujets. Je ne me prononcerai pas sur la pertinence des sujets sélectionnés par cet ouvrage et les autres qui jouent dans la même catégorie. Tous ont leur logique et il est très probable que chaque enseignant en algorithmique opèrera sa propre sélection. Je recommande donc la lecture de cet ouvrage sans réserve sur le fond.Pourquoi les étoiles en moins alors ? Malheureusement l'auteur s'est enfermé dans la posture énervante de rédiger un teaser pour CLRS. Il est normal de renvoyer à CLRS pour les sujets non traités, mais il arrive trop souvent, à chaque chapitre en fait, que l'auteur renvoie à CLRS pour les sujets traités, et pas pour des raffinements qui n'auraient pas leur place dans une introduction, mais pour des éléments qui y ont toute leur place comme la bibliographie ou l'histoire des algorithmes décrits. Introduire un lecteur à l'algorithmique c'est aussi guider ses premiers pas dans la bibliographie et lui expliquer un petit peu comment se sont développées les idées dans ce domaine ; ça ne peut pas se réduire à « allez-voir le livre sacré » !
D**B
this was a fantastic introduction to algorithms and helped scratch a theoretic itch
As a software engineer of a decade who never done computer science at uni and doesn't work with algorithms on a daily basis, this was a fantastic introduction to algorithms and helped scratch a theoretic itch.
D**U
Good book for anyone looking for a brief intro to ...
Good book for anyone looking for a brief intro to algos but not recommended . It is complete in it self but as im doing btech cs it's not what we need. Better one would be the CLRS .
Trustpilot
Hace 2 días
Hace 2 meses