Algorithmic Toolbox | Week 5
Course Name: Algorithmic Toolbox
Course Link: Algorithmic Toolbox
These are Algorithmic Toolbox Week 5 Programming Assignment Coursera Answers
Programming Assignment 5: Dynamic Programming 1
5-1: Money Change Again
import math
money = int(input())
denominations = [1, 3, 4]
minCoins = [0] + [math.inf]*money
for i in range(1, money+1):
for j in denominations:
if i>=j:
coins = minCoins[i-j]+1
if coins < minCoins[i]:
minCoins[i] = coins
print(minCoins[money])
5-2: Primitive Calculator
import math n = int(input()) num_operations = [0, 0] + [math.inf]*(n-1) for i in range(2, n+1): temp1, temp2, temp3 = [math.inf]*3 temp1 = num_operations[i-1] + 1 if i%2 == 0: temp2 = num_operations[i//2] + 1 if i%3 == 0: temp3 = num_operations[i//3] + 1 min_ops = min(temp1, temp2, temp3) num_operations[i] = min_ops print(num_operations[n]) nums = [n] while n!=1: if n%3 ==0 and num_operations[n]-1 == num_operations[n//3]: nums += [n//3] n = n//3 elif n%2 ==0 and num_operations[n]-1 == num_operations[n//2]: nums += [n//2] n = n//2 else: nums += [n-1] n = n - 1 print(' '.join([str(i) for i in nums][::-1]))
These are Algorithmic Toolbox Week 5 Programming Assignment Coursera Answers
5-3: Edit Distance
def edit_distance(first_string, second_string): m, n = len(first_string), len(second_string) # Create a (m+1)x(n+1) matrix to store the edit distances dp = [[0] * (n + 1) for _ in range(m + 1)] # Initialize the base cases for i in range(m + 1): dp[i][0] = i for j in range(n + 1): dp[0][j] = j # Fill the dp table for i in range(1, m + 1): for j in range(1, n + 1): if first_string[i - 1] == second_string[j - 1]: dp[i][j] = dp[i - 1][j - 1] else: dp[i][j] = min(dp[i - 1][j] + 1, # Deletion dp[i][j - 1] + 1, # Insertion dp[i - 1][j - 1] + 1) # Substitution return dp[m][n] if __name__ == "__main__": import sys input = sys.stdin.read data = input().split() first_string = data[0] second_string = data[1] print(edit_distance(first_string, second_string))
These are Algorithmic Toolbox Week 5 Programming Assignment Coursera Answers
5-4: Longest Common Subsequence of Two Sequence
def lcs2(first_sequence, second_sequence): n = len(first_sequence) m = len(second_sequence) dp = [[0] * (m + 1) for _ in range(n + 1)] for i in range(1, n + 1): for j in range(1, m + 1): if first_sequence[i - 1] == second_sequence[j - 1]: dp[i][j] = dp[i - 1][j - 1] + 1 else: dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) return dp[n][m] if __name__ == '__main__': n = int(input()) a = list(map(int, input().split())) assert len(a) == n m = int(input()) b = list(map(int, input().split())) assert len(b) == m print(lcs2(a, b))
These are Algorithmic Toolbox Week 5 Programming Assignment Coursera Answers
5-5: Longest Common Subsequence of Three Sequence
def lcs3(first_sequence, second_sequence, third_sequence): n = len(first_sequence) m = len(second_sequence) l = len(third_sequence) dp = [[[0] * (l + 1) for _ in range(m + 1)] for __ in range(n + 1)] # Fill the dp table for i in range(1, n + 1): for j in range(1, m + 1): for k in range(1, l + 1): if first_sequence[i - 1] == second_sequence[j - 1] and first_sequence[i - 1] == third_sequence[k - 1]: dp[i][j][k] = dp[i - 1][j - 1][k - 1] + 1 else: dp[i][j][k] = max(dp[i - 1][j][k], dp[i][j - 1][k], dp[i][j][k - 1]) return dp[n][m][l] if __name__ == '__main__': n = int(input()) a = list(map(int, input().split())) assert len(a) == n m = int(input()) b = list(map(int, input().split())) assert len(b) == m q = int(input()) c = list(map(int, input().split())) assert len(c) == q print(lcs3(a, b, c))
These are Algorithmic Toolbox Week 5 Programming Assignment Coursera Answers
More Weeks of the course: Click Here
More Coursera courses: https://progiez.com/coursera