python -- 最长公共子序列
来源:互联网 发布:广东淘宝商城 编辑:程序博客网 时间:2024/05/19 03:46
#! /usr/bin/env python3# -*- coding: utf-8 -*-# 最长公共子序列# fish fosh >>> fshdef findlongestsubstring(source, dest): # 输入值, 要比较的值inLen = len(source)outLen = len(dest)target = []cell = [ [0 for j in range(inLen+1)] for i in range(outLen+1)]for i in range(1, outLen+1):for j in range(1, inLen+1):if dest[i-1] == source[j-1]:cell[i][j] = cell[i-1][j-1] + 1target.append(dest[i-1])else:cell[i][j] = max(cell[i-1][j], cell[i][j-1])for i in range(1, outLen+1):for j in range(1, inLen+1):print(cell[i][j], end=', ')print()print("The Longest sub sequence of \"%s\" and \"%s\" is %s" % (source, dest, target))if __name__ == "__main__":findlongestsubstring("fish", "fosh")
核心思想:
if word_a[i] == word_b[j]: ←--------两个字母相同
cell[i][j] = cell[i-1][j-1] + 1
else: ←------------------------------两个字母不同
cell[i][j] = max(cell[i-1][j], cell[i][j-1])
tips
1. 生物学家根据最长公共序列来确定DNA链的相似性,进而判断度两种动物或疾病有多相似。最长公共序列还被用来寻找多发性硬化症治疗方案。
2. 你使用过诸如 git diff 等命令吗?它们指出两个文件的差异,也是使用动态规划实现的。
3. 前面讨论了字符串的相似程度。编辑距离 (levenshtein distance)指出了两个字符串的相似程度,也是使用动态规划计算得到的。编辑距离算法的用途很多,从拼写检查到判断用户上传的资料是否是盗版,都在其中。
4. 你使用过诸如Microsoft Word等具有断字功能的应用程序吗?它们如何确定在什么地方断字以确保行长一致呢?使用动态规划!
动态规划总结:
1. 需要在给定约束条件下优化某种指标时,动态规划很有用。
2. 问题可分解为离散子问题时,可使用动态规划来解决。
3. 每种动态规划解决方案都涉及网格。
4. 单元格中的值通常就是你要优化的值。
5. 每个单元格都是一个子问题,因此你需要考虑如何将问题分解为子问题。
6. 没有放之四海皆准的计算动态规划解决方案的公式。
阅读全文
0 0
- 最长公共子序列-python
- 最长公共子序列 python
- python -- 最长公共子序列
- 最长公共子序列python实现
- 最长公共子序列及Python实现
- 最长公共子序列(LCS)问题 python
- Python 实现最长公共子序列LCS
- 最长公共子序列(Python)
- 最长公共子序列问题Python实现
- 最长递增子列、最长公共子序列 python实现
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列...
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 反射让一个类及其超类的的字段全部为null--设置字段为null
- 项目:通讯录(I/O文件版)
- 采用python中SQLalchemy模块访问数据库
- solrCloud搭建
- EXT4文件系统之多块分配
- python -- 最长公共子序列
- 通过shell脚本配置android属性和配置新属性的方法
- 如何在GitHub上下载文件/仓库
- Java实现余弦定理计算文本相似度
- 详细版官网pregel代码注释
- 浅析LoRa技术特点及其市场应用前景
- Git 项目上传
- 数据库常用语句
- MySQL获取所有分组的前N条记录