Settings

Theme

Learning Algorithms

paedubucher.ch

60 points by paedubucher 2 years ago · 24 comments

Reader

rg111 2 years ago

The author would do himself a great service if he chooses some other resource for learning algorithms.

CLRS isn't bad. It is meant for a reference, and it also assumes that you are taking the course in college with an instructor teaching you.

There are other great resources out there.

Two I recommend are:

- Algorithms, Coursera (Sedgewick, Wayne)

- The Algorithm Design Manual (Skiena)

I have recommended self-taught programmers in the past, which all of them liked:

- A Common Sense Guide to Data Structures and Algorithms, PragProg (Jay Wengrow)

- Algorithms Illumited, book or Coursera MOOC (Tim Rougharden)

  • sdenton4 2 years ago

    Skiena is great.

    My usual learn-a-new-language routine is speed-running the first 25ish Project Euler problems. They cover a lot of three usual language basics.

    https://projecteuler.net/

    • sn9 2 years ago

      Skiena posts recent semesters of lectures on Youtube as playlists, as well.

      Going through them at 1.25-1.5x speed, a lecture per night or every few days, is extremely helpful.

  • paedubucherOP 2 years ago

    One issue I have with CLRS is that array indices usually start at 1, but sometimes they use 0, because it works better in that particular case. Some functions I used in Erlang (lists:sublist/3, lists:nth/2) use 1-based indices, too. I thought that 0-based array indices (and exclusive upper bounds) were quite a done deal in computer science (https://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/E...).

  • speakspokespok 2 years ago

    I always recommend 'A Common Sense Guide to Data Structures and Algorithms' as well but I'd like to call out the 2nd edition has expanded the recursion chapters and in general the end of chapter assignments are better. The 2nd edition was born from several years of teaching material from the first edition.

  • PartiallyTyped 2 years ago

    CLRS and Tardos && Kleinberg are great if you spend a whole year on the book and have mathematical background.

    The latter is great for algorithms because it groups everything by concepts, ie greedy, DP and then network flows.

BossingAround 2 years ago

I've recently been trying to learn algorithms as a self-taught software engineer. I've made it quite far without much deeper knowledge of the area (I do have some basic overview of course), but it has always been on my mind that I should to study up.

I've tried CLRS, but oh boy it's a) a slog to go through, b) very sparse with explanations. You might say that the whole book is one explanation after another, and you'd be technically right, but there's nothing more frustrating than an overly complex explanation that might be absolutely precise yet complex to understand. I also often feel like the language is needlessly complex.

On top of that, for example, the mathematical explanations often skip steps that are obvious to authors. You might think it's reasonable, but to a struggling newcomer, this is a huge drag.

Unrelated to algorithms (but not totally), I am now studying Discrete Mathematics for Comp Sci [0] since I felt like my math knowledge (or lack thereof) is holding me back in reasoning about algorithms. Even those courses have a fair share of skipping obvious steps in mathematic explanations, but it's doable so far (especially with tools like ChatGPT and Wolfram Alpha to check my understanding).

I'm just trying to be a better engineer, and I'm having a really hard time trying to find a suitable resource to learn from.

[0] https://www.coursera.org/specializations/discrete-mathematic...

  • trealira 2 years ago

    I'm still in university, but I took discrete math at my university last semester and took data structures over the summer between semesters.

    My data structures course mainly was graded from Zybooks assignments. I think it's actually a pretty good and understandable resource. It was this: https://www.zybooks.com/catalog/data-structures-essentials/

    Anyway, maybe after you study discrete math from Coursera, that Zybook could help. It has some basics about big-O notation and determining the big-O of an algorithm (and calculating the number of operations it requires), but after that, it's all explanations of data structures accompanied by many animations and pictures. It may be tedious for someone who already knows how e.g. red black trees works, but it helped me understand them, as well as unbalanced BSTs, AVL trees, B-trees, heaps, and graphs. The stacks and queues were tedious for me, because I already know them.

    I do think having taken discrete math helped me; I still flipped through CRLS during the course on the side, and their explanations were less impenetrable because I know the basics of mathematical proofs now.

    There's also a book on data structures that went over hash functions (it's out of print, but I found a PDF online). It was also helpful for me. I'll reply to this comment with it when I get home.

    • trealira 2 years ago

      I got home. The book is Handbook of Algorithms and Data Structures in Pascal and C by G.H. Gonnet and R. Baeza Yates.

  • eachro 2 years ago

    Leetcode is actually quite good for this. You can find problems to do by topic and the process of doing the easy -> medium problems will get you pretty far in the way of the standard topics (greedy, dynamic programming, divide/conquery, graph search, fundamental data structures and so on).

    • deprecative 2 years ago

      Anecdotal in the other way, Leetcode didn't help me at all trying to learn anything. If I knew algorithms and all that went with it/them I'd probably be able to get something out of those exercises.

  • goodbyesf 2 years ago

    > I'm just trying to be a better engineer

    Your time would be better spent on accumulating domain knowledge in whatever industry you are working in - finance, healthcare, government, etc. Especially if you want career advancement or make yourself look more attractive to prospective employers. Unless you are directly involved in writing algorithms or academic research, you really won't be proving time and space complexity of algorithms in your job. A general understanding is sufficient for 99% of the jobs out there.

    • mekoka 2 years ago

      What a strange advice. So much to disagree with, but I'll just stick with algorithms specifically. Only once I went through ds & algo, after a relatively long career, that I understood what Linus Torvalds meant by "bad programmers worry about the code. Good programmers worry about data structures and their relationships."

      • goodbyesf 2 years ago

        > Linus Torvalds meant by "bad programmers worry about the code. Good programmers worry about data structures and their relationships."

        That's why I wrote: 'Unless you are directly involved in writing algorithms or academic research, you really won't be proving time and space complexity of algorithms in your job. A general understanding is sufficient for 99% of the jobs out there.' If you are developing a kernel, then you should have a solid understanding of algorithms, data structures, etc. But 99% of programmers aren't developing kernels. 99% of programmers are working in industry - finance, healthcare, government, etc.

    • mdp2021 2 years ago

      Let us rephrase it as

      "be balanced". (Do not disregard the other sides, work on all dimensions.)

  • rg111 2 years ago

    Best beginners' Discrete Math MOOC I have ever seen: https://youtube.com/playlist?list=PLEAYkSg4uSQ2Wfc_l4QEZUSRd...

zelphirkalt 2 years ago

Can anyone recommend a book, that deals with purely functional algorithms? I already have "Purely Functional Data Structures" by Okasaki, which I began working through, but still have a long way to go. However, it is about data structures, not about algorithms, strictly speaking.

Perhaps there is a book for algorithms that does it the functional way? Probably a lot of it comes down to naive versions of algorithms using functional data structures and then some changes in the algorithms due to optimizing for functional data structures?

colesantiago 2 years ago

Are there any startups doing or requiring complex or exotic algorithms these days to solve unique engineering problems?

Would really love to know to see different and various use cases.

anoy8888 2 years ago

Don’t forget to try out Pharo which is modern small talk

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection