0% found this document useful (0 votes)
3 views9 pages

Algorithm Lab Ans

Uploaded by

zohara hazmiya
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views9 pages

Algorithm Lab Ans

Uploaded by

zohara hazmiya
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 9

1.

linear search
import time

times = []
n = int(input("Enter number of test cases: "))

for i in range(n):
m = int(input("Enter number of elements: "))
a = []
print("Array elements for test case", i + 1, ":")
for j in range(m):
ab = int(input())
a.append(ab)

key = int(input("Enter a key to search: "))


f = 1
start = time.time()

for i in range(len(a)):
if a[i] == key:
print("Key is found at index:", i)
f = 0
break

if f == 1:
print("Key is not found")

end = time.time()
total = end - start
print("Total time taken:", total, "seconds")

times.append(total)

2.binary search
import time

times = []
n = int(input("Enter number of test cases: "))

for t in range(n):
m = int(input("Enter number of elements: "))
a = []
print("Array elements for test case", t + 1, ":")
for j in range(m):
ab = int(input())
a.append(ab)

a.sort()
print("Sorted array:", a)
key = int(input("Enter a key to search: "))
start = time.time() # start time

low = 0
high = len(a) - 1
found = False

while low <= high:


mid = (low + high) // 2
if a[mid] == key:
print("Key is found at index:", mid)
found = True
break
elif a[mid] < key:
low = mid + 1
else:
high = mid - 1

if not found:
print("Key is not found")

end = time.time()
total = end - start
print("Total time taken:", total, "seconds")

times.append(total)
3.bfs
graph = {
5: [3, 7],
3: [2, 4],
7: [8],
2: [],
4: [8],
8: []
}

visited = []
queue = []

def bfs(visited, graph, node):


visited.append(node)
queue.append(node)
while queue:
m = queue.pop(0)
print(m, end=" ")
for neighbour in graph[m]:
if neighbour not in visited:
visited.append(neighbour)
queue.append(neighbour)
print("Breadth-First Search:")
bfs(visited, graph, 5)

4.dfs
graph = {
'5': ['3', '7'],
'3': ['2', '4'],
'7': ['8'],
'2': [],
'4': ['8'],
'8': []
}

visited = set()

def dfs(visited, graph, node):


if node not in visited:
print(node, end=" ")
visited.add(node)
for neighbour in graph[node]:
dfs(visited, graph, neighbour)

print("Depth-First Search:")
dfs(visited, graph, '5')

5.insertion sort
arr = [12, 45, 78, 96, 56, 77, 51, 8, 104, 96]

def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i - 1
while j >= 0 and arr[j] > key:
arr[j + 1] = arr[j]
j = j - 1
arr[j + 1] = key

insertion_sort(arr)

print("Sorted list:", arr)

5.heap sort
import time
import random
import matplotlib.pyplot as plt

def heapify(arr, n, i):


largest = i
left = 2 * i + 1
right = 2 * i + 2

if left < n and arr[left] > arr[largest]:


largest = left
if right < n and arr[right] > arr[largest]:
largest = right
if largest != i:
arr[i], arr[largest] = arr[largest], arr[i]
heapify(arr, n, largest)

def heap_sort(arr):
n = len(arr)
for i in range(n // 2 - 1, -1, -1):
heapify(arr, n, i)
for i in range(n - 1, 0, -1):
arr[0], arr[i] = arr[i], arr[0]
heapify(arr, i, 0)

sizes = [12, 7, 10, 25]


times = []

for n in sizes:
data = [random.randint(1, 100) for _ in range(n)]
start = time.time()
heap_sort(data)
end = time.time()
times.append(end - start)
print(f"Sorted list for n = {n}:", data)

plt.plot(sizes, times, marker='o', color='blue')


plt.xlabel("Number of elements (n)")
plt.ylabel("Time taken (seconds)")
plt.title("Heap Sort Time vs List Size")
plt.grid(True)
plt.show()

6.prims
import networkx as nx

G = nx.Graph()
nodes_list = [1, 2, 3, 4, 5, 6, 7]
G.add_nodes_from(nodes_list)

edges_list = [
(1, 2, 1), (1, 4, 4), (2, 3, 2), (2, 4, 6), (2, 5, 4),
(3, 5, 5), (3, 6, 6), (4, 5, 3), (4, 7, 4),
(5, 6, 8), (5, 7, 7), (6, 7, 3)
]

G.add_weighted_edges_from(edges_list)

mst = nx.minimum_spanning_tree(G, algorithm='prim')

print("Minimum Spanning Tree edges (sorted by weight):")


for edge in sorted(mst.edges(data=True), key=lambda x: x[2]['weight']):
print(edge)

7.warshalls
def warshalls_algorithm(graph):
n = len(graph)
transitive_closure = [row[:] for row in graph]

for k in range(n):
for i in range(n):
for j in range(n):
transitive_closure[i][j] = transitive_closure[i][j] or
(transitive_closure[i][k] and transitive_closure[k][j])

return transitive_closure

graph = [
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1],
[1, 0, 0, 0]
]

result = warshalls_algorithm(graph)

for row in result:


print(row)

9.nqueens
N = 8

def print_board(board):
for row in board:
print(" ".join(row))
print()

def is_safe(board, row, col):


for i in range(col):
if board[row][i] == 'Q':
return False
for i, j in zip(range(row, -1, -1), range(col, -1, -1)):
if board[i][j] == 'Q':
return False

for i, j in zip(range(row, N), range(col, -1, -1)):


if board[i][j] == 'Q':
return False

return True

def solve(board, col):


if col >= N:
print_board(board)
return True

for i in range(N):
if is_safe(board, i, col):
board[i][col] = 'Q'
if solve(board, col + 1):
return True
board[i][col] = '0'

return False

board = [['0' for _ in range(N)] for _ in range(N)]


solve(board, 0)

10.kth randomized smallest num


import random

def quickselect(arr, k):


if len(arr) == 1:
return arr[0]

pivot = random.choice(arr)

low = [x for x in arr if x < pivot]


equal = [x for x in arr if x == pivot]
high = [x for x in arr if x > pivot]

if k <= len(low):
return quickselect(low, k)
elif k <= len(low) + len(equal):
return pivot
else:
return quickselect(high, k - len(low) - len(equal))

numbers = [12, 45, 78, 96, 56, 77, 51, 8, 104, 96]
k = 4
result = quickselect(numbers, k)
print(f"{k}th smallest number is:", result)

11.merge sort
def merge_sort(arr):
if len(arr) > 1:
mid = len(arr) // 2
left = arr[:mid]
right = arr[mid:]

merge_sort(left)
merge_sort(right)

i = j = k = 0

while i < len(left) and j < len(right):


if left[i] < right[j]:
arr[k] = left[i]
i += 1
else:
arr[k] = right[j]
j += 1
k += 1

while i < len(left):


arr[k] = left[i]
i += 1
k += 1

while j < len(right):


arr[k] = right[j]
j += 1
k += 1

numbers = [12, 45, 78, 96, 56, 77, 51, 8, 104, 96]
merge_sort(numbers)
print("Sorted list is:", numbers)

12.quick sort
def quick_sort(arr):
if len(arr) <= 1:
return arr
else:
pivot = arr[0]
left = [x for x in arr[1:] if x < pivot]
right = [x for x in arr[1:] if x >= pivot]
return quick_sort(left) + [pivot] + quick_sort(right)
numbers = [73, 42, 18, 85, 6, 97, 51, 24, 90, 13]
sorted_list = quick_sort(numbers)
print("Sorted list is:", sorted_list)

13.divide and conquer find max


def find_max(arr, low, high):
if low == high:
return arr[low]
mid = (low + high) // 2
max1 = find_max(arr, low, mid)
max2 = find_max(arr, mid + 1, high)
return max1 if max1 > max2 else max2

numbers = [12, 45, 78, 96, 56, 77, 51, 8, 104, 96]
result = find_max(numbers, 0, len(numbers) - 1)
print("Maximum number is:", result)

14.divide and conquer find min


def find_min(arr, low, high):
if low == high:
return arr[low]
mid = (low + high) // 2
min1 = find_min(arr, low, mid)
min2 = find_min(arr, mid + 1, high)
return min1 if min1 < min2 else min2

numbers = [12, 45, 78, 96, 56, 77, 51, 8, 104, 96]
result = find_min(numbers, 0, len(numbers) - 1)
print("Minimum number is:", result)

15. pair shortest path for the following graph


# Number of vertices
V = 4

# Representing the graph as an adjacency matrix


INF = float('inf')
graph = [
[0, 1, 8, INF], # from node 1 to others
[INF, 0, 1, INF], # from node 2 to others
[INF, INF, 0, 2], # from node 3 to others
[4, INF, 9, 0] # from node 4 to others
]

def floyd_warshall(graph):
# Number of vertices in graph
V = len(graph)

# Initialize distance matrix same as input graph matrix


dist = [row[:] for row in graph]
# Applying Floyd Warshall
for k in range(V):
for i in range(V):
for j in range(V):
if dist[i][k] + dist[k][j] < dist[i][j]:
dist[i][j] = dist[i][k] + dist[k][j]

# Print the shortest distance matrix


print("All Pairs Shortest Path Matrix:")
for row in dist:
print(["INF" if x == INF else x for x in row])

floyd_warshall(graph)

You might also like