You are on page 1of 4

#kmp

def Kmp(t,p):
m=len(t)
n=len(p)
lps=[0]*n
computelps(p,n,lps)
i=0
j=0
while i< j-n+m:
if t[i]==p[j]:
i+=1
j+=1
if j==n:
print(i-j)
j=lps[j-1]
elif i < m and p[j] != t[i]:
if j != 0:
j=lps[j-1]
else:
i += 1
def computelps(p,n,lps):
len=0
i=1
lps[0]=0
while i<n:
if p[i]==p[len]:
len+=1
lps[i]=len
i+=1
else:
if len!=0:
len=0
else:
lps[i]=0
i+=1
if __name__=='__main__':
t="onionionspl"
p="onions"
Kmp(t,p)

#tries
class Trie:
def __init__(self):
self.root={'*':'*'}
def insert(self,word):
cur=self.root
for i in word:
if i not in cur:
cur[i]={}
cur=cur[i]
cur['*']='*'
def search(self,word):
cur=self.root
for i in word:
if i not in cur:
return False
cur=cur[i]
return '*' in cur
t=Trie()
words=['wait','waiter','shop','shopper']
for word in words:
t.insert(word)
print(t.search('wait'))
print(t.search('waiter'))
print(t.search('shoping'))

#BST
class Binaryst:
def __init__(self,key):
self.key=key
self.lchild=None
self.rchild=None
def insert(node,data):
if node is None:
return Binaryst(data)
if data < node.key:
node.lchild=insert(node.lchild,data)
else:
node.rchild=insert(node.rchild,data)
return node
def searchbst(node,val):
flag=1
if node is None or node.key == val:
return node
if node.key < val:
return searchbst(node.rchild,val)
else:
return searchbst(node.lchld,val)
def printP(self):
if self.lchild:
printP(self.lchild)
print(self.key,'-->',end='')
if self.rchild:
printP(self.rchild)

def minNode(node):
current = node
while(current.lchild is not None):
current = current.lchild
return current

def deleteNode(node, key):


if node is None:
return node
if key < node.key:
node.lchild = deleteNode(node.lchild, key)
elif(key > node.key):
node.rchild = deleteNode(node.rchild, key)
else:
if node.lchild is None:
temp = node.rchild
node = None
return temp
elif node.rchild is None:
temp = node.lchild
node = None
return temp
temp = minNode(node.rchild)
node.key = temp.key
node.rchild = deleteNode(node.rchild, temp.key)
return node

T=Binaryst(5)
T=insert(T,4)
T=insert(T,6)
T=deleteNode(T,5)
T=printP(T)
#T=searchbst(T,5)
#hashing
htable=[None]*10
"""
def checkprime(n):
if n==0 or n==1:
return False
for i in range(2,n//2):
if n%i == 0:
return False
return True
def getprime(n):
if n%2==0:
n=n+1
while not checkprime(n):
n=n+2
return n
"""
def hashfun(key):
return (3*key+23)%10
def collide(htable,index):
if htable[index]is None:
return True
else:
return False
def handle(htable,index):
for i in range(index,10):
if htable[i]==None:
return i
for i in range(index):
if htable[i]==None:
return i
def insertdata(key, data):
index=hashfun(key)
if collide(htable,index):
htable[index]=[key,data]
else:
index=handle(htable,index)
htable[index]=[key,data]

def removedata(key):
index=hashfun(key)
if not collide(htable,index):
if htable[index][0]==key:
htable[index]=None
else:
index=handle(htable,index)
if htable[index][0]==key:
htable[index]=None

insertdata(61,'g')
insertdata(23,'gi')
insertdata(89,'gu')
insertdata(60,'gui')
insertdata(24,'g')
insertdata(46,'gye')
insertdata(78,'gyu')
insertdata(86,'gye')
insertdata(73,'gyu')
removedata(46)
removedata(45)
removed
print(htable)

You might also like