Browse papers
A

Section A: Long Answer Questions

Attempt any TWO questions.

3 questions·10 marks each
1long10 marks

What is backtracking and how does it differ from recursion? Solve the 4-Queens problem using backtracking and analyze its time complexity.

Backtracking

Backtracking is an algorithmic technique for solving problems incrementally by building a solution one piece at a time and abandoning a partial candidate ("backtracking") as soon as it determines the candidate cannot possibly lead to a valid complete solution. It performs a systematic depth-first search of the state-space tree, using bounding/feasibility checks to prune branches that violate constraints.

Backtracking vs. Recursion

AspectRecursionBacktracking
NatureA general technique where a function calls itselfA specific problem-solving strategy that uses recursion
GoalBreak a problem into smaller subproblemsSearch the solution space and discard infeasible partial solutions
PruningNo inherent pruningPrunes (cuts off) branches via constraint checks (bounding function)
Backward stepJust returnsUndoes the last choice and tries the next alternative

In short, backtracking is recursion + state-space search + pruning.

4-Queens Problem using Backtracking

Place 4 queens on a 4×44\times4 board so that no two attack each other (no two in the same row, column, or diagonal). We place one queen per row and try columns 1..41..4, backtracking when a placement is unsafe.

A placement at row ii, column jj is safe w.r.t. an earlier queen at (k,c)(k, c) if:

cjandkicjc \neq j \quad\text{and}\quad |k-i| \neq |c-j|
algorithm NQueens(board, row, n):
    if row == n:
        output solution; return
    for col = 0 to n-1:
        if isSafe(board, row, col):
            place queen at (row, col)
            NQueens(board, row+1, n)
            remove queen from (row, col)   // backtrack

Trace for n = 4 (board[row] = column):

  • Row 0: place Q at col 0.
  • Row 1: col 0,1 unsafe → col 2 safe. Place at col 2.
  • Row 2: cols 0,1,2,3 all attacked → dead end, backtrack to row 1.
  • Row 1: try col 3. Place at col 3.
  • Row 2: only col 1 safe. Place at col 1.
  • Row 3: col 0,1,2 unsafe, col 3 unsafe → dead end. Backtrack repeatedly to row 0.
  • Row 0: place Q at col 1.
  • Row 1: col 3 safe. Row 2: col 0 safe. Row 3: col 2 safe. Solution found.

Solution: positions (0,1),(1,3),(2,0),(3,2)(0,1),(1,3),(2,0),(3,2):

. Q . .
. . . Q
Q . . .
. . Q .

(The second solution is its mirror: (0,2),(1,0),(2,3),(3,1)(0,2),(1,0),(2,3),(3,1).)

Time Complexity

Without pruning, nn queens in nn rows with nn column choices gives an upper bound of O(nn)O(n^n); restricting to one queen per column gives O(n!)O(n!) permutations. Each isSafe check costs O(n)O(n), so a loose bound is O(n!n)O(n! \cdot n). Backtracking's pruning dramatically reduces the explored nodes in practice, but the worst-case time complexity remains exponential, O(n!)O(n!).

backtrackingn-queen
2long10 marks

Define minimum spanning tree. Write Kruskal's algorithm to find the MST of a connected weighted graph, illustrate it with an example and analyze its complexity.

Minimum Spanning Tree (MST)

Given a connected, undirected, weighted graph G=(V,E)G=(V,E), a spanning tree is a subgraph that is a tree connecting all V|V| vertices using exactly V1|V|-1 edges. A Minimum Spanning Tree is a spanning tree whose total edge weight is the minimum among all spanning trees of GG.

Kruskal's Algorithm

Kruskal's is a greedy algorithm that builds the MST by repeatedly adding the smallest-weight edge that does not form a cycle, using a Disjoint-Set (Union-Find) structure to detect cycles.

algorithm Kruskal(G):
    A = {}                      // MST edge set
    for each vertex v: MakeSet(v)
    sort all edges E in non-decreasing order of weight
    for each edge (u, v) in sorted order:
        if Find(u) != Find(v):  // u, v in different components -> no cycle
            A = A union {(u,v)}
            Union(u, v)
    return A

Example

Graph with vertices {A,B,C,D}\{A,B,C,D\} and edges: AB=1,  BC=2,  CD=3,  AD=4,  AC=5AB=1,\; BC=2,\; CD=3,\; AD=4,\; AC=5.

Sort edges: AB(1),BC(2),CD(3),AD(4),AC(5)AB(1), BC(2), CD(3), AD(4), AC(5).

EdgeWeightForms cycle?Action
AB1NoAdd
BC2NoAdd
CD3NoAdd
AD4Yes (A,D already connected)Reject
AC5YesReject

MST edges = {AB,BC,CD}\{AB, BC, CD\}, total weight =1+2+3=6= 1+2+3 = 6, with V1=3|V|-1 = 3 edges.

Complexity Analysis

  • Sorting EE edges: O(ElogE)O(E \log E).
  • Union-Find operations (with union by rank + path compression): nearly O(Eα(V))O(E\,\alpha(V)), effectively O(E)O(E).

Overall: O(ElogE)=O(ElogV)O(E \log E) = O(E \log V) time (since EV2E \le V^2, logE=O(logV)\log E = O(\log V)). Space: O(V+E)O(V+E).

graphmst
3long10 marks

Define asymptotic notations (Big-O, Big-Omega, Big-Theta). State the master theorem and use it to solve the recurrences T(n)=3T(n/2)+n and T(n)=2T(n/4)+sqrt(n).

Asymptotic Notations

Let f(n)f(n) and g(n)g(n) be non-negative functions.

  • Big-O (Upper bound): f(n)=O(g(n))f(n)=O(g(n)) if there exist constants c>0,n0>0c>0, n_0>0 such that 0f(n)cg(n)0 \le f(n) \le c\,g(n) for all nn0n \ge n_0. It gives the worst-case / upper growth rate.
  • Big-Omega (Lower bound): f(n)=Ω(g(n))f(n)=\Omega(g(n)) if there exist c>0,n0>0c>0, n_0>0 such that 0cg(n)f(n)0 \le c\,g(n) \le f(n) for all nn0n \ge n_0. It gives a lower bound.
  • Big-Theta (Tight bound): f(n)=Θ(g(n))f(n)=\Theta(g(n)) if there exist c1,c2>0,n0>0c_1,c_2>0, n_0>0 such that 0c1g(n)f(n)c2g(n)0 \le c_1 g(n) \le f(n) \le c_2 g(n) for all nn0n \ge n_0. Thus f=Θ(g)f=\Theta(g) iff f=O(g)f=O(g) and f=Ω(g)f=\Omega(g).

Master Theorem

For a recurrence of the form T(n)=aT(n/b)+f(n)T(n)=aT(n/b)+f(n) with a1,b>1a\ge1, b>1, let c=logbac = \log_b a. Compare f(n)f(n) with ncn^{c}:

  1. Case 1: if f(n)=O(ncϵ)f(n)=O(n^{c-\epsilon}) for some ϵ>0\epsilon>0, then T(n)=Θ(nc)T(n)=\Theta(n^{c}).
  2. Case 2: if f(n)=Θ(nc)f(n)=\Theta(n^{c}), then T(n)=Θ(nclogn)T(n)=\Theta(n^{c}\log n).
  3. Case 3: if f(n)=Ω(nc+ϵ)f(n)=\Omega(n^{c+\epsilon}) for some ϵ>0\epsilon>0 and af(n/b)kf(n)a f(n/b)\le k f(n) (regularity, k<1k<1), then T(n)=Θ(f(n))T(n)=\Theta(f(n)).

Recurrence 1: T(n)=3T(n/2)+nT(n)=3T(n/2)+n

Here a=3,b=2,f(n)=na=3, b=2, f(n)=n.   c=log231.585\;c=\log_2 3 \approx 1.585.

Compare f(n)=n=n1f(n)=n=n^1 with n1.585n^{1.585}. Since n=O(ncϵ)n = O(n^{\,c-\epsilon}) (e.g. ϵ0.585\epsilon\approx0.585), Case 1 applies.

T(n)=Θ(nlog23)Θ(n1.585)\boxed{T(n)=\Theta(n^{\log_2 3}) \approx \Theta(n^{1.585})}

Recurrence 2: T(n)=2T(n/4)+nT(n)=2T(n/4)+\sqrt{n}

Here a=2,b=4,f(n)=n=n1/2a=2, b=4, f(n)=\sqrt{n}=n^{1/2}.   c=log42=1/2\;c=\log_4 2 = 1/2.

Compare f(n)=n1/2f(n)=n^{1/2} with nc=n1/2n^{c}=n^{1/2}. They are equal, so f(n)=Θ(nc)f(n)=\Theta(n^{c})Case 2 applies.

T(n)=Θ(n1/2logn)=Θ(nlogn)\boxed{T(n)=\Theta(n^{1/2}\log n)=\Theta(\sqrt{n}\,\log n)}
asymptoticrecurrence
B

Section B: Short Answer Questions

Attempt any EIGHT questions.

9 questions·5 marks each
4short5 marks

Explain heap sort algorithm with an example and analyze its time complexity.

Heap Sort

Heap sort is a comparison-based sorting algorithm that uses a binary max-heap (a complete binary tree where every parent \ge its children, stored in an array).

Steps:

  1. Build a max-heap from the input array (heapify from the last internal node down to the root).
  2. Repeatedly extract the maximum: swap the root (largest) with the last element, reduce heap size by 1, and call max-heapify on the root to restore the heap property.
  3. Repeat until the heap is empty; the array becomes sorted in ascending order.
HeapSort(A, n):
    BuildMaxHeap(A, n)
    for i = n-1 downto 1:
        swap(A[0], A[i])
        MaxHeapify(A, 0, i)   // heap size = i

Example

Sort A=[4,10,3,5,1]A=[4,10,3,5,1].

  • Build max-heap: [10,5,3,4,1][10,5,3,4,1].
  • Swap root 10 with last → [1,5,3,410][1,5,3,4 \,|\,10], heapify → [5,4,3,110][5,4,3,1\,|\,10].
  • Swap 5 → [1,4,35,10][1,4,3\,|\,5,10], heapify → [4,1,35,10][4,1,3\,|\,5,10].
  • Swap 4 → [3,14,5,10][3,1\,|\,4,5,10], heapify → [3,14,5,10][3,1\,|\,4,5,10].
  • Swap 3 → [13,4,5,10][1\,|\,3,4,5,10].
  • Sorted: [1,3,4,5,10][1,3,4,5,10].

Time Complexity

  • BuildMaxHeap: O(n)O(n).
  • Each of the n1n-1 extractions calls MaxHeapify costing O(logn)O(\log n)O(nlogn)O(n\log n).

Total: O(nlogn)O(n\log n) in best, average and worst cases. It sorts in place (O(1)O(1) extra space) but is not stable.

sortingheap
5short5 marks

Explain how the subset-sum problem is solved using backtracking with an example.

Subset-Sum Problem

Given a set of positive integers S={s1,s2,,sn}S=\{s_1,s_2,\dots,s_n\} and a target sum WW, find a subset whose elements add up to exactly WW.

Backtracking Approach

We explore a binary state-space tree: at each element we decide to include or exclude it. We track the running sum and prune branches using two bounding conditions (assuming elements are sorted):

  • Prune if currentSum + s[i] > W (including this element overshoots), and
  • Prune if currentSum + (sum of remaining elements) < W (cannot reach WW).
SubsetSum(i, currentSum, subset):
    if currentSum == W: output subset; return
    if i == n or currentSum > W: return
    // include s[i]
    if currentSum + s[i] <= W:
        SubsetSum(i+1, currentSum + s[i], subset + s[i])
    // exclude s[i]
    if currentSum + remainingSum(i+1) >= W:
        SubsetSum(i+1, currentSum, subset)

Example

S={3,4,5,6}S=\{3,4,5,6\}, target W=9W=9.

  • Include 3 → sum 3. Include 4 → 7. Include 5 → 12 (>9, prune). Exclude 5, include 6 → 13? no; from 7 exclude 5,exclude... reaching dead ends.
  • From sum 3, exclude 4, include 5 → 8, include 6 → 14 prune; exclude 6 → dead end.
  • Include 3, exclude 4, exclude 5, exclude 6 → 3 ≠ 9.
  • Backtrack: exclude 3, include 4, include 5 → 9 ✓ → subset {4,5}\{4,5\}.
  • Also include 3, include 6 → 9 ✓ → subset {3,6}\{3,6\}.

Solutions: {4,5}\{4,5\} and {3,6}\{3,6\}.

Complexity

The worst-case state space has 2n2^n nodes, so the time complexity is O(2n)O(2^n), though pruning reduces the search substantially in practice.

backtrackingsubset-sum
6short5 marks

What are approximation algorithms? Explain the approximation algorithm for the vertex cover problem.

Approximation Algorithms

Many optimization problems (e.g. vertex cover, TSP) are NP-hard, so no known polynomial-time algorithm finds the exact optimum. An approximation algorithm runs in polynomial time and returns a solution guaranteed to be within a provable factor of the optimum.

For a minimization problem, an algorithm has approximation ratio ρ\rho if for every input the cost CC of its solution satisfies CρCC \le \rho \cdot C^{*}, where CC^{*} is the optimal cost.

Approximation Algorithm for Vertex Cover

A vertex cover of graph G=(V,E)G=(V,E) is a set of vertices that includes at least one endpoint of every edge. Finding the minimum vertex cover is NP-hard. The following greedy algorithm gives a 2-approximation:

ApproxVertexCover(G):
    C = {}
    E' = E
    while E' is not empty:
        pick any edge (u, v) from E'
        add both u and v to C
        remove from E' every edge incident on u or v
    return C

Why it is a 2-approximation

The set of edges picked in the loop forms a matching MM (they share no endpoints). Any vertex cover must include at least one endpoint of each edge in MM, so CM|C^{*}| \ge |M|. The algorithm adds both endpoints, so C=2M2C|C| = 2|M| \le 2|C^{*}|.

Thus C2C|C| \le 2\,|C^{*}| — the solution is at most twice the optimum. Running time is O(V+E)O(V+E).

Example: for a path abca-b-c, picking edge (a,b)(a,b) adds {a,b}\{a,b\} and covers both edges → cover {a,b}\{a,b\} (size 2 vs optimum {b}\{b\} of size 1, still within factor 2).

approximation
7short5 marks

Explain the branch and bound technique. How is it used to solve the travelling salesman problem?

Branch and Bound

Branch and Bound (B&B) is a technique for solving optimization problems (often NP-hard) by systematically exploring the state-space tree while using bounds to prune subtrees that cannot contain an optimal solution.

  • Branch: partition the problem into subproblems (children of a node).
  • Bound: compute a lower bound (for minimization) on the best solution obtainable in each subtree.
  • Prune: if a node's bound \ge the cost of the best complete solution found so far, discard that subtree.

Nodes are explored using strategies such as least-cost (best-first), FIFO (BFS), or LIFO (DFS). Unlike pure backtracking (which only checks feasibility), B&B uses a cost/bound function to guide and prune the search.

Travelling Salesman Problem (TSP) with B&B

TSP: find the minimum-cost tour that visits every city exactly once and returns to the start.

Lower-bound function: A common bound is computed from the reduced cost matrix. For each row and column, subtract its minimum entry; the sum of all subtracted values is a lower bound on any tour cost.

Procedure:

  1. Form the cost matrix; reduce it (row + column reduction) to get the root's lower bound.
  2. Branch by choosing to include or exclude a particular edge (i,j)(i,j), creating child nodes.
  3. For each child, set the chosen row ii / column jj (and the reverse edge) to \infty, re-reduce the matrix, and add the reduction cost + edge cost to the parent's bound to get the child's bound.
  4. Use a priority queue to always expand the live node with the least bound (best-first search).
  5. When a complete tour is reached, update the best (upper bound). Prune any node whose lower bound \ge current best.
  6. Continue until the least-bound live node is itself a complete tour → optimal.

B&B avoids exploring the full O(n!)O(n!) search space by pruning, though its worst-case time is still exponential. It guarantees the exact optimal tour.

branch-and-bound
8short5 marks

Differentiate between Breadth First Search (BFS) and Depth First Search (DFS) with examples and their time complexities.

BFS vs. DFS

Both Breadth First Search (BFS) and Depth First Search (DFS) are graph traversal algorithms that visit every vertex once.

FeatureBFSDFS
Data structureQueue (FIFO)Stack (LIFO) / recursion
OrderVisits all neighbours level by levelGoes as deep as possible before backtracking
Shortest pathFinds shortest path (fewest edges) in unweighted graphsDoes not guarantee shortest path
SpaceO(V)O(V) — stores a whole level (can be wide)O(V)O(V) — stores the current path/recursion stack
ApplicationsShortest path, level-order, bipartite check, broadcastingTopological sort, cycle detection, connected components, path finding

Time Complexity

For a graph with VV vertices and EE edges using an adjacency list, both run in O(V+E)O(V+E). With an adjacency matrix, both run in O(V2)O(V^2).

Example

Graph (adjacency): A ⁣: ⁣B,C    B ⁣: ⁣D,E    C ⁣: ⁣F    D,E,F ⁣: ⁣A\!:\!B,C\;\;B\!:\!D,E\;\;C\!:\!F\;\;D,E,F\!:\!-, starting at AA.

  • BFS order: A,B,C,D,E,FA, B, C, D, E, F (explores neighbours level by level).
  • DFS order: A,B,D,E,C,FA, B, D, E, C, F (goes deep along ABDA\to B\to D, backtracks, then CFC\to F).
graphbfs-dfs
9short5 marks

Solve the recurrence relation T(n) = 2T(n/2) + n using the substitution method and the recursion tree method.

Recurrence: T(n)=2T(n/2)+nT(n)=2T(n/2)+n

This is the recurrence for merge sort. We solve it two ways.

(a) Substitution Method

Guess: T(n)=O(nlogn)T(n)=O(n\log n). Prove T(n)cnlognT(n)\le c\,n\log n by induction.

Assume it holds for n/2n/2: T(n/2)cn2logn2T(n/2)\le c\,\frac{n}{2}\log\frac{n}{2}. Then

T(n)2(cn2logn2)+n=cnlogn2+n=cn(lognlog2)+n.T(n) \le 2\left(c\,\frac{n}{2}\log\frac{n}{2}\right)+n = c\,n\log\frac{n}{2}+n = c\,n(\log n-\log 2)+n.

With log2=1\log 2 = 1:

T(n)=cnlogncn+n=cnlogn(c1)ncnlognfor c1.T(n)= c\,n\log n - c\,n + n = c\,n\log n - (c-1)n \le c\,n\log n \quad\text{for } c\ge 1.

The inductive step holds, so T(n)=O(nlogn)T(n)=O(n\log n).

(b) Recursion Tree Method

At each level the work done equals the sum of the non-recursive terms:

Level# subproblemsSize eachWork per nodeWork at level
01nnnnnn
12n/2n/2n/2n/2nn
24n/4n/4n/4n/4nn
\vdotsnn
ii2i2^in/2in/2^in/2in/2^inn

Each level contributes nn work. The tree has height log2n\log_2 n, so there are log2n+1\log_2 n + 1 levels.

T(n)=i=0log2nn=n(log2n+1)=Θ(nlogn).T(n) = \sum_{i=0}^{\log_2 n} n = n(\log_2 n + 1) = \Theta(n\log n).

Conclusion: T(n)=Θ(nlogn)\boxed{T(n)=\Theta(n\log n)} (confirmed by both methods; also Master Theorem Case 2).

recurrencesubstitution
10short5 marks

Explain the job sequencing with deadlines problem and solve it using the greedy approach for a given set of jobs.

Job Sequencing with Deadlines

Problem: Given nn jobs, each with a deadline did_i and a profit pip_i (earned only if the job finishes by its deadline), schedule jobs on a single machine where each job takes one unit of time. Maximize total profit. Only one job runs per time slot.

Greedy Approach

  1. Sort all jobs in decreasing order of profit.
  2. Find the maximum deadline dmaxd_{max} and create that many time slots (initially empty).
  3. For each job (highest profit first), place it in the latest free slot at or before its deadline. If no such slot is free, reject the job.
JobSequencing(jobs):
    sort jobs by profit descending
    slots[1..dmax] = free
    for each job j:
        for t = min(dmax, j.deadline) downto 1:
            if slots[t] is free:
                slots[t] = j; break

Example

JobJ1J2J3J4J5
Profit20151051
Deadline22133

Max deadline = 3, so slots [1][2][3].

  • J1 (p20, d2): place at slot 2 → [_, J1, _].
  • J2 (p15, d2): slot 2 full → slot 1 → [J2, J1, _].
  • J3 (p10, d1): slot 1 full → rejected.
  • J4 (p5, d3): slot 3 free → [J2, J1, J4].
  • J5 (p1, d3): slots 3,2,1 full → rejected.

Schedule: J2 → J1 → J4. Maximum profit =15+20+5=40= 15+20+5 = 40.

Complexity

Sorting is O(nlogn)O(n\log n); slot assignment is O(ndmax)O(n\cdot d_{max}), so overall O(n2)O(n^2) in the simple version (or near O(nlogn)O(n\log n) with a disjoint-set optimization).

greedyjob-scheduling
11short5 marks

Explain the naive string matching algorithm and the Rabin-Karp algorithm with their time complexities.

Naive String Matching

To find a pattern PP of length mm in a text TT of length nn, the naive algorithm slides PP over TT one position at a time and, at each of the nm+1n-m+1 shifts, compares characters one by one.

NaiveMatch(T, P):
    for s = 0 to n-m:
        if P[0..m-1] == T[s..s+m-1]:
            report match at s
  • Best case: O(n)O(n) (mismatch on first character each time).
  • Worst case: O((nm+1)m)=O(nm)O((n-m+1)\cdot m) = O(nm) (e.g. T=aaaa...aT=\texttt{aaaa...a}, P=aaabP=\texttt{aaab}).

Rabin-Karp Algorithm

Rabin-Karp uses hashing to avoid comparing every character at every shift. It computes a hash of the pattern and a rolling hash of each mm-length window of the text; only when hashes match does it verify character by character (to handle collisions / spurious hits).

The rolling hash updates in O(1)O(1) per shift:

hash(Ts+1)=(d(hash(Ts)T[s]dm1)+T[s+m])modq\text{hash}(T_{s+1}) = \big(d\,(\text{hash}(T_s) - T[s]\cdot d^{m-1}) + T[s+m]\big) \bmod q

where dd is the alphabet size and qq a prime modulus.

RabinKarp(T, P, d, q):
    compute hp = hash(P), ht = hash(T[0..m-1])
    for s = 0 to n-m:
        if hp == ht and P == T[s..s+m-1]:
            report match at s
        update ht to next window (rolling hash)

Time Complexity

AlgorithmAverageWorst case
NaiveO(nm)O(nm)O(nm)O(nm)
Rabin-KarpO(n+m)O(n+m)O(nm)O(nm) (many hash collisions)

With a good hash and prime qq, Rabin-Karp runs in O(n+m)O(n+m) on average; its worst case degrades to O(nm)O(nm) when spurious hits force full verification.

string-matching
12short5 marks

Write an algorithm for binary search using divide and conquer. Analyze its best-case, worst-case and average-case time complexity.

Binary Search (Divide and Conquer)

Binary search finds a key xx in a sorted array A[low..high]A[\,low..high\,] by repeatedly comparing xx with the middle element and discarding half the array each time — a classic divide-and-conquer technique.

BinarySearch(A, low, high, x):
    if low > high:
        return -1                 // not found
    mid = low + (high - low) / 2
    if A[mid] == x:
        return mid
    else if x < A[mid]:
        return BinarySearch(A, low, mid-1, x)   // search left half
    else:
        return BinarySearch(A, mid+1, high, x)   // search right half

Each step reduces the problem size to n/2n/2, giving the recurrence:

T(n)=T(n/2)+O(1).T(n) = T(n/2) + O(1).

By the Master Theorem (a=1,b=2,c=log21=0a=1, b=2, c=\log_2 1 = 0, f(n)=O(1)=Θ(n0)f(n)=O(1)=\Theta(n^0), Case 2): T(n)=Θ(logn)T(n)=\Theta(\log n).

Time Complexity Analysis

CaseWhen it occursComparisonsComplexity
BestKey is at the middle on the first probe1O(1)O(1)
WorstKey is absent, or at an extreme; array halved until size 1log2n\log_2 nO(logn)O(\log n)
AverageKey at a random positionlog2n\approx \log_2 nO(logn)O(\log n)

Space: O(logn)O(\log n) for the recursive call stack (O(1)O(1) if implemented iteratively).

binary-search

Frequently asked questions

Where can I find the BSc CSIT (TU) Design and Analysis of Algorithms (BSc CSIT, CSC314) question paper 2078?
The full BSc CSIT (TU) Design and Analysis of Algorithms (BSc CSIT, CSC314) 2078 (regular) question paper is available free on Kekkei. You can read every question online and attempt the paper under timed exam conditions.
Does the Design and Analysis of Algorithms (BSc CSIT, CSC314) 2078 paper come with solutions?
Yes. Every question on this Design and Analysis of Algorithms (BSc CSIT, CSC314) past paper includes a step-by-step solution, plus instant AI feedback when you attempt it on Kekkei.
How many marks is the BSc CSIT (TU) Design and Analysis of Algorithms (BSc CSIT, CSC314) 2078 paper?
The BSc CSIT (TU) Design and Analysis of Algorithms (BSc CSIT, CSC314) 2078 paper carries 60 full marks and is meant to be completed in 180 minutes, across 12 questions.
Is practising this Design and Analysis of Algorithms (BSc CSIT, CSC314) past paper free?
Yes — reading and attempting this Design and Analysis of Algorithms (BSc CSIT, CSC314) past paper on Kekkei is completely free.