"""Algorithm for calculating the most cost-efficient sequence for converting one stringinto another.The only allowed operations are---Copy character with cost cC---Replace character with cost cR---Delete character with cost cD---Insert character with cost cI"""def compute_transform_tables(X, Y, cC, cR, cD, cI):X = list(X)Y = list(Y)m = len(X)n = len(Y)costs = [[0 for _ in range(n + 1)] for _ in range(m + 1)]ops = [[0 for _ in range(n + 1)] for _ in range(m + 1)]for i in range(1, m + 1):costs[i][0] = i * cDops[i][0] = "D%c" % X[i - 1]for i in range(1, n + 1):costs[0][i] = i * cIops[0][i] = "I%c" % Y[i - 1]for i in range(1, m + 1):for j in range(1, n + 1):if X[i - 1] == Y[j - 1]:costs[i][j] = costs[i - 1][j - 1] + cCops[i][j] = "C%c" % X[i - 1]else:costs[i][j] = costs[i - 1][j - 1] + cRops[i][j] = "R%c" % X[i - 1] + str(Y[j - 1])if costs[i - 1][j] + cD < costs[i][j]:costs[i][j] = costs[i - 1][j] + cDops[i][j] = "D%c" % X[i - 1]if costs[i][j - 1] + cI < costs[i][j]:costs[i][j] = costs[i][j - 1] + cIops[i][j] = "I%c" % Y[j - 1]return costs, opsdef assemble_transformation(ops, i, j):if i == 0 and j == 0:seq = []return seqelse:if ops[i][j][0] == "C" or ops[i][j][0] == "R":seq = assemble_transformation(ops, i - 1, j - 1)seq.append(ops[i][j])return seqelif ops[i][j][0] == "D":seq = assemble_transformation(ops, i - 1, j)seq.append(ops[i][j])return seqelse:seq = assemble_transformation(ops, i, j - 1)seq.append(ops[i][j])return seqif __name__ == "__main__":_, operations = compute_transform_tables("Python", "Algorithms", -1, 1, 2, 2)m = len(operations)n = len(operations[0])sequence = assemble_transformation(operations, m - 1, n - 1)string = list("Python")i = 0cost = 0with open("min_cost.txt", "w") as file:for op in sequence:print("".join(string))if op[0] == "C":file.write("%-16s" % "Copy %c" % op[1])file.write("\t\t\t" + "".join(string))file.write("\r\n")cost -= 1elif op[0] == "R":string[i] = op[2]file.write("%-16s" % ("Replace %c" % op[1] + " with " + str(op[2])))file.write("\t\t" + "".join(string))file.write("\r\n")cost += 1elif op[0] == "D":string.pop(i)file.write("%-16s" % "Delete %c" % op[1])file.write("\t\t\t" + "".join(string))file.write("\r\n")cost += 2else:string.insert(i, op[1])file.write("%-16s" % "Insert %c" % op[1])file.write("\t\t\t" + "".join(string))file.write("\r\n")cost += 2i += 1print("".join(string))print("Cost: ", cost)file.write("\r\nMinimum cost: " + str(cost))
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。