.. contents::
.. code-block:: python
numbers = [5,6,2,7,6,2,0,4]
max = numbers[0]
for number in numbers:
if number > max:
max = number
The Big-0 of this program is n O(n)
Try to search and see if the number 0 is in the list or array
.. code-block:: python
numbers = [5,6,2,7,6,2,0,4]
for number in numbers: if number == 0: return True
The Big-0 of this program is n O(n)
Try to search to see if the number 80 is in the list or array.
the needle is the number we are searching for.
Note We call this algorithm the binary search.
.. code-block:: python
# binary search haystack = [0,11,25,38,41,54,66,79,80,94] needle = 80
lo = 0 hi = len( haystack )
while lo < hi:
mid = int( (lo + hi) / 2 )
if needle > haystack[ mid ]:
lo = mid + 1
elif needle < haystack[ mid ]:
hi = mid
else:
print "found %d which is the %d index of the list" % ( haystack[ mid ], mid )
break
The Big-0 of this program is n O(logn) - base 2
This is a very good algorithm!
This is a bubble sort algo using python, don’t use this in production this is for learning only!
BIGO( n^2 )
.. code-block:: python
def bubsort( mylist ): while True: swapped = False for i in range( 0, len( mylist ) - 1 ): if mylist[i] > mylist[i+1]: temp = mylist[i] mylist[i] = mylist[i+1] mylist[i+1] = temp swapped = True if not swapped: break
.. code-block:: python
def gcd( x, y ): “““Find greatest common divisor of two numbers recursion”“”
if y == 0:
return x
else:
return gcd( y, x%y )
def gcd2( x, y ): “““find the greatest common divisor of two numebrs”“” for i in range( 2, x ): if x % i == 0 and y % i == 0: return i;
if name == “main”: print gcd( 287, 91 ) print gcd2( 287, 91 )
: )
A heap is a binary tree where the parent is always larger than its children.
Determine the last nodes that are leaves: (total number of items / 2) - 1
.. code-block:: python
def build_heap( data ): “““Turn any array or list (data) into a heap tree”“” j = ( len( data ) / 2 ) - 1 i = j while i >= 0: current = data[i] #insert_heap( current, i , length of subtree i - 1 ) i -= 1
Most operating systems use heap tree to manage memory.
Don’t use this in production! python has a datatype called dict, use that instead!!!
This is an example of building a hash table.
Assume that:
Algorythm:
Example:
.. code-block:: python
keys = 5,2,3,7
A = list() A[2] = 2 A[5] = 5 A[3] = 3 A[7] = 7
Assume that:
Algorythm:
hash function like md5 or sha256 hash(x) = x mod 6
If you have collisions there could be a problem.
A few ‘easy’ hash functions:
example = 11141874
A[874] = 11141874
first 2 chars + last 2 chars
A[85] = 11141874
Modular
k mod m where m is the array size
example m = 10
Note: Count the total number of comparisons in terms of n.
for( int i = 2 ; i<= n ; i++ ){ } Worst case there will be at least two comparisons. Or at least n - 1 comparisons.
Always look for the worst case when finding the Big-O
O( 1 )
Constant complexity
O( log n )
Logarithmic complexity
O( n )
Linear complexity
O( n log n )
n log n complexity
O( n^b )
Polynomial complexity
O( b^n ), where b>1
Exponential complexity
O( n! )
Factorial complexity