Skip to content

Instantly share code, notes, and snippets.

View rishi93's full-sized avatar

Rajarishi Devarajan rishi93

View GitHub Profile
@rishi93
rishi93 / lzw.py
Created September 15, 2015 05:33
Lempel Ziv Welch
def encode(string):
result = []
for c in string:
result.append(ord(c))
return result
def compress(string):
dictionary = {chr(i):i for i in range(97,123)}
last = 256
result = []
@rishi93
rishi93 / merge_sort.py
Last active September 15, 2015 05:52
Mergesort
def merge(left,right):
result = []
while len(left) > 0 and len(right) > 0:
if left[0] < right[0]:
result.append(left[0])
left = left[1:]
else:
result.append(right[0])
right = right[1:]
if len(left) > 0:
@rishi93
rishi93 / naive_pattern_search.py
Created September 15, 2015 05:51
Naive Pattern Searching
def search(string,pattern):
string_len = len(string)
pattern_len = len(pattern)
for i in range(0,string_len - pattern_len + 1):
for j in range(0,pattern_len):
if string[i+j] != pattern[j]:
break
if j == pattern_len - 1:
print("Pattern found at index",i)
@rishi93
rishi93 / rabin_karp.py
Created September 15, 2015 07:05
Rabin Karp Algorithm
from hashlib import md5
def rabinkarp(string,pattern):
string_len = len(string)
pattern_len = len(pattern)
pattern_bytes = pattern.encode()
pattern_hash = md5(pattern_bytes).hexdigest()
for i in range(0,string_len-pattern_len+1):
substring = string[i:i+pattern_len]
substring_bytes = substring.encode()
@rishi93
rishi93 / dijkstra.py
Created September 15, 2015 09:59
Dijkstra's Algorithm
class vertex():
def __init__(self,name):
self.name = name
self.neighbours = []
def connected_to(self,vertex,distance):
self.neighbours.append((vertex,distance))
class graph():
def __init__(self):
self.vertices = []
@rishi93
rishi93 / kmp.py
Last active September 16, 2015 07:36
Knuth Morris Pratt String Matching Algorithm
def prefix_table(pattern):
result = [0]
for i in range(1,len(pattern)):
val = 0
for j in range(i,0,-1):
prefix = pattern[0:j]#Generate a prefix
suffix = pattern[i-j+1:i+1]#Generate a suffix
if prefix == suffix:
val = len(prefix)
break
@rishi93
rishi93 / quicksort.py
Created September 23, 2015 06:07
Quicksort in Place
def quicksort(arr,start,stop):
if stop > start:
left = start
right = stop
pivot = arr[start]
while left <= right:
while arr[left] < pivot:
left += 1
while arr[right] > pivot:
right -= 1
@rishi93
rishi93 / shuffle.py
Created September 23, 2015 06:52
Fisher Yates Shuffling Algorithm
import random
def shuffle(arr):
for i in range(len(arr)-1,0,-1):
temp = random.randint(0,i) #random integer N such that 0<=N<=i
arr[i],arr[temp] = arr[temp],arr[i]
arr = [1,2,3,4,5,6]
shuffle(arr)
print(arr)
@rishi93
rishi93 / selectionsort.py
Last active November 3, 2015 07:01
Selection Sort
def selectionsort(arr):
for i in range(0,len(arr)):
min_index = i
for j in range(i+1,len(arr)):
if arr[j] < arr[min_index]:
min_index = j
arr[min_index],arr[i] = arr[i],arr[min_index]
print(arr)
arr = [4,3,1,6,2,5]
@rishi93
rishi93 / insertionsort.py
Created September 23, 2015 11:26
Insertion Sort
def insertionsort(arr):
for i in range(1,len(arr)):
val = arr[i]
j = i - 1
while j >= 0 and arr[j]>val:
arr[j+1] = arr[j]
j -= 1
arr[j+1] = val
print(arr)