tags : Computation and Computer Theory, Data Structures, Algorithm Problems, Recursion, Big Oh Notation, Problem solving Strategies in Algorithms
Meta
- nlogn : we do n, logn amount of times.
Search
Binary search
- List must be sorted
Worst case
- In binary search, worst case is till we half it till we can’t half no more. i.e item not in list.
- So we need to find out “How many times we can
halfsomething util we get to1”
⇒ ⇒ ⇒
- i.e we can
halfsomethingktimes till we get1.
About one-offs w binary search
- The algorithm is rather simple. But there’s a solid possibility of off by one errors with implementing Binary search.
- Things mostly differ based on how
lowandhighis defined- It changes the condition
- It changes what we return
- There can be different ways to calculate
lowandhighand all these do the same thing- eg. The pseudo-code in wikipedia differs from what’s there in CLRS, but they do the same exact thing.
- It’s just about knowing what you set for
lowandhighand then seeing that through the implementation of your algorithm. So you’ll be able to follow any implementation of binary search that way. - You can define this in terms of inclusive and exclusiveness.
- :
lowidx from the array,highidx out of array.highislen(arr)-1 - :
lowidx from the array,highidx from the array.highislen(arr) - In both these cases, you can come up w an algorithm for binary search but how you calculate other variables will differ based on this thing.
- :
Integer overflow
- We need to be careful about our invariants.
- First,
highandlowboth need to be in the integer range that’s allowed. - Second, the usual way of calculating
midis(high+low)/2which is susceptible to integer overflow. - So usually
midis calculated aslow + (high-low)/2which results in a integer that is in range and is mathematically the same as(high+low)/2. This is something we need to do due to the limitations of our computers. As mentioned here, Nearly All Binary Searches and Mergesorts are broken
Resources
- Bitwise Binary Search: Elegant and Fast | orlp.net
- Beautiful Branchless Binary Search | Probably Dance
Sorting

- If ≤ for the entire array, array is sorted.
- Largely two types, comparison based and non-comparison. (Lookup wikipedia). Me(a pleb) will mostly deal w comparison algorithms, non-comparison based include things like bucket sort, radix sort etc.
Bubble, Selection and Insertionare akaQuadratic Sorting algorithmsbecause they take quadratic time.stable: the stability of a sorting algorithm means if 2 elements in the input list are the same and then the list is sorted, the order of the 2 same elements will be preserved.
Exchange based
Bubble sort
- Repeatedly swapping adjacent elements that are out of order
- At the end of 1st pass, you’ll have the max(arr) at the end of the array
Selection based
Selection sort
Heapsort
- Good to understand before Quicksort
Insertion based
- For scenarios where they need to merge 2 lists together
- Insertion sort is very fast for small arrays and it’s also better at using the hardware than bubblesort.
Divide and Concur based
Quick sort
- In place sort
- Uses partitioning using pivot item
- Worst case: Reverse sorted and we pick pivot to be the smallest item.
- Time complexity: , can be in worst case
- Implementation
- Partition func : Produces the pivot index and moves the items from one side to other
- Quicksort func: Calls partition func, gets the pivot, recalls itself
- If you apply quicksort to 2^20 random integers, at some point you’re sorting 2^17 8-integer subpartitions. Switching over to bubblesort for those subpartitions would be a nice optimization.
- Algo (TODO CHECK)
- Pick a pivot.
- Create 3 new lists
- all elements less than the pivot
- all elements greater than the pivot
- all elements equal to the pivot
- Recursively sort the first and second of these lists.
- Concatenate the list of smaller, equal, and larger values.
Merge sort
- For situations where you’re are getting in a piecemeal fashion. (eg. sorting a big file by loading chunks)
- Time complexity: (Always), but involves copying of data unlike quicksort.
Others
Topological sort
- https://github.com/python/cpython/blob/3.11/Lib/graphlib.py
- 7.17. Topological Sorting — Problem Solving with Algorithms and Data Structures 3rd edition
Tree Traversal
- See Trees
Graph
See Graphs
Pathfinding
Meta
- Graph search algorithms work on
weighted-directedgraphs - They only understand the
connectivityof the graph - Order
- CSS:
TOP-RIGHT-BOTTOM-LEFT - Dir (differential direction, )
- L: [-1,0]
- R: [1,0]
- T: [0,1]
- B: [0,-1]
- LT: [-1,1] (diagonals)
- LB: [-1,-1]
- RT: [1,1]
- RB: [1,-1]
- CSS: