AOA Practical Questions Solution [MU]

The AOA practical exam can be a daunting task, but with Doubtly.in, you can ace it with confidence. Our comprehensive blog provides a treasure trove of solved practical questions, meticulously aligned with the Mumbai University curriculum.

selection sort

def selection_sort(arr):
    n = len(arr)
    for i in range(n):
        min_index = i
        for j in range(i+1, n):
            if arr[j] < arr[min_index]:
                min_index = j
        arr[i], arr[min_index] = arr[min_index], arr[i]
    return arr

arr = []
size = int(input("Enter size of array: "))
for i in range(size):
    arr.append(int(input("Enter element {}: ".format(i+1))))

sorted_arr = selection_sort(arr)
print("Sorted array:", sorted_arr)

merge sort

def merge_sort(arr):
    if len(arr) <= 1:
        return arr

    mid = len(arr) // 2
    left = arr[:mid]
    right = arr[mid:]

    left = merge_sort(left)
    right = merge_sort(right)

    return merge(left, right)

def merge(left, right):
    result = []
    i = j = 0

    while i < len(left) and j < len(right):
        if left[i] < right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1

    result += left[i:]
    result += right[j:]

    return result

arr = []
size = int(input("Enter size of array: "))
for i in range(size):
    arr.append(int(input("Enter element {}: ".format(i+1))))

sorted_arr = merge_sort(arr)
print("Sorted array:", sorted_arr)


To implement fractional knapsack problem using Greedy method.

def fractional_knapsack(items, capacity):
    """
    Solve the fractional knapsack problem using the greedy method.

    Parameters:
    items - A list of tuples representing the items, where each tuple is of the form (weight, value).
    capacity - The maximum weight the knapsack can hold.

    Returns:
    The maximum value that can be obtained by filling the knapsack with the given capacity.
    """

    # Sort items in decreasing order of value per unit weight
    items = sorted(items, key=lambda x: x[1] / x[0], reverse=True)

    # Initialize variables
    total_value = 0
    total_weight = 0

    # Iterate through each item and add to knapsack until capacity is reached
    for item in items:
        weight = item[0]
        value = item[1]
        if total_weight + weight <= capacity:
            total_weight += weight
            total_value += value
        else:
            remaining_capacity = capacity - total_weight
            fraction = remaining_capacity / weight
            total_weight += remaining_capacity
            total_value += fraction * value
            break

    return total_value

# Take user input for items and capacity
items = []
n = int(input("Enter the number of items: "))
for i in range(n):
    weight = float(input("Enter the weight of item {}: ".format(i+1)))
    value = float(input("Enter the value of item {}: ".format(i+1)))
    items.append((weight, value))

capacity = float(input("Enter the capacity of the knapsack: "))

# Call the fractional_knapsack function and print the result
max_value = fractional_knapsack(items, capacity)
print("The maximum value that can be obtained is:", max_value)

minimum cost spanning tree using Kruskal

# Kruskal's algorithm implementation for minimum cost spanning tree
from collections import defaultdict

class Graph:
    def __init__(self, vertices):
        self.V = vertices # Number of vertices
        self.graph = [] # Graph with edges and their weights
    
    def addEdge(self, u, v, w):
        self.graph.append([u, v, w])
    
    def find(self, parent, i):
        if parent[i] == i:
            return i
        return self.find(parent, parent[i])
    
    def union(self, parent, rank, x, y):
        xroot = self.find(parent, x)
        yroot = self.find(parent, y)
        
        if rank[xroot] < rank[yroot]:
            parent[xroot] = yroot
        elif rank[xroot] > rank[yroot]:
            parent[yroot] = xroot
        else:
            parent[yroot] = xroot
            rank[xroot] += 1
    
    def kruskalMST(self):
        result = [] # Minimum Spanning Tree
        i = 0 # Index variable, used for sorted edges
        e = 0 # Index variable, used for result[]
        
        self.graph = sorted(self.graph, key=lambda item: item[2])
        
        parent = []
        rank = []
        
        for node in range(self.V):
            parent.append(node)
            rank.append(0)
        
        while e < self.V - 1:
            u, v, w = self.graph[i]
            i += 1
            x = self.find(parent, u)
            y = self.find(parent, v)
            
            if x != y:
                e += 1
                result.append([u, v, w])
                self.union(parent, rank, x, y)
        
        return result
    
# Driver code
V = int(input("Enter the number of vertices: "))
g = Graph(V)

E = int(input("Enter the number of edges: "))
for i in range(E):
    print("Enter the source, destination, and weight of edge", i+1)
    u, v, w = map(int, input().split())
    g.addEdge(u, v, w)

# Construct and print Minimum Spanning Tree
print("Minimum Spanning Tree using Kruskal's algorithm:")
mst = g.kruskalMST()
for u, v, weight in mst:
    print(f"{u} - {v}: {weight}")

m s p prims


# Prim's algorithm implementation for minimum cost spanning tree
import sys

class Graph:
    def __init__(self, vertices):
        self.V = vertices # Number of vertices
        self.graph = [[0 for column in range(vertices)] for row in range(vertices)] # Graph with edges and their weights
    
    def printMST(self, parent):
        print("Minimum Spanning Tree using Prim's algorithm:")
        for i in range(1, self.V):
            print(f"{parent[i]} - {i}: {self.graph[i][parent[i]]}")
    
    def minKey(self, key, mstSet):
        min_value = sys.maxsize
        min_index = -1
        
        for v in range(self.V):
            if key[v] < min_value and mstSet[v] == False:
                min_value = key[v]
                min_index = v
        
        return min_index
    
    def primMST(self):
        key = [sys.maxsize] * self.V # Key values used to pick minimum weight edge in cut
        parent = [None] * self.V # Array to store constructed MST
        key[0] = 0 # Make key 0 to pick the first vertex
        mstSet = [False] * self.V # Set all vertices as not yet included in MST
        
        parent[0] = -1 # First node is always the root of MST
        
        for cout in range(self.V):
            u = self.minKey(key, mstSet)
            mstSet[u] = True
            
            for v in range(self.V):
                if self.graph[u][v] > 0 and mstSet[v] == False and key[v] > self.graph[u][v]:
                    key[v] = self.graph[u][v]
                    parent[v] = u
        
        self.printMST(parent)

# Driver code
V = int(input("Enter the number of vertices: "))
g = Graph(V)

for i in range(V):
    print(f"Enter the weights of edges for vertex {i}")
    weights = list(map(int, input().split()))
    for j in range(V):
        g.graph[i][j] = weights[j]

# Construct and print Minimum Spanning Tree
g.primMST()


All Pairs Shortest Path algorithm using Dynamic programming

INF = float('inf')

# Function to compute the shortest path between all pairs of vertices
def floyd_warshall(graph):
    n = len(graph)
    dist = [[0 if i == j else graph[i][j] if graph[i][j] != 0 else INF for j in range(n)] for i in range(n)]
    
    for k in range(n):
        for i in range(n):
            for j in range(n):
                dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])
    
    return dist

# Taking user input for the graph
n = int(input("Enter the number of vertices: "))
graph = []
print("Enter the adjacency matrix of the graph:")
for i in range(n):
    row = list(map(int, input().split()))
    graph.append(row)

# Computing and printing the shortest path between all pairs of vertices
dist = floyd_warshall(graph)
print("The minimum distances between all pairs of vertices are:")
for i in range(n):
    for j in range(n):
        if dist[i][j] == INF:
            print("INF", end=" ")
        else:
            print(dist[i][j], end=" ")
    print()

Longest common subsequence algorithm

def lcs(seq1, seq2):
    m, n = len(seq1), len(seq2)
    dp = [[0] * (n + 1) for _ in range(m + 1)]
    
    for i in range(1, m + 1):
        for j in range(1, n + 1):
            if seq1[i - 1] == seq2[j - 1]:
                dp[i][j] = dp[i - 1][j - 1] + 1
            else:
                dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])
    
    lcs_len = dp[m][n]
    lcs_seq = ""
    i, j = m, n
    while i > 0 and j > 0:
        if seq1[i - 1] == seq2[j - 1]:
            lcs_seq = seq1[i - 1] + lcs_seq
            i -= 1
            j -= 1
        elif dp[i - 1][j] > dp[i][j - 1]:
            i -= 1
        else:
            j -= 1
    
    return lcs_len, lcs_seq

# Taking user input for the sequences
seq1 = input("Enter the first sequence: ")
seq2 = input("Enter the second sequence: ")

# Computing and printing the length and sequence of the LCS
lcs_len, lcs_seq = lcs(seq1, seq2)
print("The length of the longest common subsequence is:", lcs_len)
print("The longest common subsequence is:", lcs_seq)

n queen

 def is_safe(board, row, col, n):
    # Check row on left side
    for i in range(col):
        if board[row][i] == 1:
            return False

    # Check upper diagonal on left side
    for i, j in zip(range(row, -1, -1), range(col, -1, -1)):
        if board[i][j] == 1:
            return False

    # Check lower diagonal on left side
    for i, j in zip(range(row, n), range(col, -1, -1)):
        if board[i][j] == 1:
            return False

    # Queen can be placed in this position
    return True


def solve_n_queens(board, col, n):
    # Base case: all queens are placed
    if col >= n:
        return True

    # Try placing this queen in all rows one by one
    for i in range(n):
        if is_safe(board, i, col, n):
            board[i][col] = 1

            # Recur to place rest of the queens
            if solve_n_queens(board, col + 1, n):
                return True

            # If placing queen in board[i][col] doesn't lead to a solution,
            # then remove queen from board[i][col]
            board[i][col] = 0

    # If queen can't be placed in any row in this column, then return False
    return False


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


n = int(input("Enter value of N: "))
board = [[0 for _ in range(n)] for _ in range(n)]

if solve_n_queens(board, 0, n):
    print("Solution found:")
    print_board(board)
else:
    print("No solution found")

Naive String

def naive_string_matching(text, pattern):
    m = len(pattern)
    n = len(text)
    for i in range(n-m+1):
        j = 0
        while j < m and text[i+j] == pattern[j]:
            j += 1
        if j == m:
            print("Pattern found at index", i)
            
text = "ABAAABCDBBABCDDEBCABC"
pattern = "ABC"
naive_string_matching(text, pattern)


Graph coloring

class GraphColoring:
    def __init__(self):
        self.V = 4
        self.color = []

    def isSafeToColor(self, v, graphMatrix, color, c):
        # check for each edge
        for i in range(self.V):
            if graphMatrix[v][i] == 1 and c == color[i]:
                return False
        return True

    def graphColorUtil(self, graphMatrix, m, color, v):
        # If all vertices are assigned a color then return true
        if v == self.V:
            return True

        # Try different colors for vertex V
        for i in range(1, m+1):
            # check for assignment safety
            if self.isSafeToColor(v, graphMatrix, color, i):
                color[v] = i
                # recursion for checking other vertices
                if self.graphColorUtil(graphMatrix, m, color, v + 1):
                    return True
                # if color doesn't lead to solution
                color[v] = 0

        # If no color can be assigned to vertex
        return False

    def printColoringSolution(self, color):
        print("Color schema for vertices are:")
        for i in range(self.V):
            print(color[i])

    def graphColoring(self, graphMatrix, m):
        # Initialize all color values as 0.
        self.color = [0] * self.V

        # Call graphColorUtil() for vertex 0
        if not self.graphColorUtil(graphMatrix, m, self.color, 0):
            print("Color schema not possible")
            return False

        # Print the color schema of vertices
        self.printColoringSolution(self.color)
        return True

# Driver code
if __name__ == "__main__":
    graph_algo = GraphColoring()

    graphMatrix = [
        [0, 1, 1, 1],
        [1, 0, 1, 0],
        [1, 1, 0, 1],
        [1, 0, 1, 0],
    ]
    m = 3  # Number of colors
    graph_algo.graphColoring(graphMatrix, m)

rabin karp


def rabin_karp(text, pattern):
    n = len(text)
    m = len(pattern)
    if n < m:
        return -1
    q = 101
    pattern_hash = sum(ord(pattern[i]) * pow(q, i) for i in range(m)) % q
    window_hash = sum(ord(text[i]) * pow(q, i) for i in range(m)) % q
    if pattern_hash == window_hash:
        if pattern == text[:m]:
            return 0
    for i in range(m, n):
        window_hash -= ord(text[i - m]) * pow(q, 0)
        window_hash *= q
        window_hash += ord(text[i])
        if pattern_hash == window_hash:
            if pattern == text[i - m + 1:i + 1]:
                return i - m + 1
    return -1

text = input("Enter the text: ")
pattern = input("Enter the pattern to search for: ")
index = rabin_karp(text, pattern)
if index == -1:
    print(f"The pattern '{pattern}' was not found in the text.")
else:
    print(f"The pattern '{pattern}' was found at index {index} in the text.")


Team
Team

This account on Doubtly.in is managed by the core team of Doubtly.

Articles: 483

jsDelivr CDN plugin by Nextgenthemes

These are the assets loaded from jsDelivr CDN. Do not worry about old WP versions in the URLs, this is simply because the files were not modified. A sha384 hash check is used so you can be 100% sure the files loaded from jsDelivr are the exact same files that would be served from your server.


	

Level up your video embeds with ARVE or ARVE Pro