Grokking algorithms

notes on the grokking algorithms illustrated book

Linked list over arrays for lots of writes and little reads

Quicksort. Alg recursivo de ordenamiento
Caso base es arreglo tiene <=1 elementos
Picks a pivot index

Particiona el arreglo en elementos menores y mayores que el pivot. Aplica quicksort a las particiones. Qs(menores) + pivot+ qs(mayores).

The quicksort implementatio presented on the quicksort chapter in memory inneficient. The benefit of quicksort over merge sort is that it doesn't need memory allocation. There is a better implementation.

Do they fix it in later chapters?

Hash functions receive a string and turn it into a number consistently. The number outputted represent ls where in memory a value is stored.

SHA1 for examples turns a string (or any data; photos, videos, files), into a 160 bit hash. If what is hashed is like a long file SHA executes in every 512 block of data. If a block has less than 512 bits padding is added (10000...0111).

Hashing most common use is  storing passwords. Where no one looking at a DB should be able to read users  passwords.

Im thinking just hashing isnt enough bc lets say a hacker gets access to a hashed password, he could just run

Hashing vs Encryption

Encryption transforms data with the goal to the retroeved back. The receiver of an ecrypted message needs to know de key/steps to decrypt.

Hashed data is not meant to be retrieved.


Breadth first search. I want to find shortest path from a given node to a node that passses a condition.

Initialize a queue and a map for adding checked nodes. Add given node's neighbors to queue

Traverse queue, for each node
Get/pop current node from queue

Check that current node isnt checked and if passes condition end/return. Else add current node's neighbors to queue and add entry to checked map.

If everything is traversed return false.

This alg is O(V+E) vertices/nodes + edges