The interest here is all in extending the algorithm to work with a three-dimensional cache. Basically just an implementation issue, that each programming language could solve in its own way.
Here is how I did it in python:
def solution_dp(a, b, c): cube = [] for m in range(len(c) + 1): # 1 sheet = [[0] * (len(b) + 1)] for n in range(1, len(a) + 1): sheet.append([0] * (len(b) + 1)) cube.append(sheet) for i in range(1, len(cube)): for j in range(1, len(cube[0])): for k in range(1, len(cube[0][0])): if a[j - 1] == b[k - 1] == c[i - 1]: # 2 cube[i][j][k] = cube[i - 1][j - 1][k - 1] + 1 else: cube[i][j][k] = max(cube[i - 1][j][k], cube[i][j - 1][k], cube[i][j][k - 1]) return cube[-1][-1][-1]1. If you compare this code with the one for the 2-sequences problem, you would see how the difference is all in this extra for-loop. Now the cache is a three dimensional matrix (actually, it is not a cube but a parallelepiped, you could guess why I used a wrong name here).
2. The comparisons get now three way. Luckily, python helps us keeping them readable.
Once you manage correctly the three-level loop, the job is done.
I have pushed the complete python script and its test case to GitHub.
No comments:
Post a Comment