The short answer:
Go look up the books, study the topics. The answer will reveal itself in time.
The insufficient but not that short answer:
Design principles are guidelines that tell us how to think about the code. These are usually general, like: it is nice to structure the code in functions to improve readability etc. They most likely vary from a programmer to another as every one of us has a different wealth of experience and slightly different approach to tackling a problem. A result of applying a design principle can be something like a "functional programming" approach.
Design patterns are an attempt to standardize the solution for the most common design problems. Design principles given form if you would. You can imagine them like learning the opening moves in chess - when a chess player says "Queens gambit", every other decent chess player will know which sequence of moves that means. Unfortunately this approach has its limits - design patterns are fixed tools in an everchanging environment. So while it is definitely useful to study them and learn from them, they by itself rarely provide a sufficient solution to a real world problem. Unfortunately, they are quite often used as a fixed rule, which results in many poorly written programs - when you have a hammer(and powerful one to boot), you are likely to see everything as a nail.
Algorithm
Is the easiest one to answer: https://en.wikipedia.org/wiki/Algorithm. Since it is well defined, there is not much of a room for an interpretation. Ye olde cookbook recipe.
To sum up: Design principles tell us, how to implement algorithms in a way that is readable for the humans while being readable, maintainable, extendable etc. Design patterns are one of the many attempts to standardize design principles, which might or might not have backfired, depending on a way you look at it.