贪心算法求字符串的最大公共超串(SCS)
在字符串的合并中,经常使用的两种方式是汉密尔顿路径和欧拉路径。本文演示汉密尔顿路径方式寻求字符串合并的最优解。通过贪心算法求出字符串集的1字符串间以非重叠部分为节点,以重叠部分为边,并存在指向。构成一个完整的图。并使用权重衡量最佳连接路径。
构建求两个字符串,最大重叠片段长度的方法
```python
def overlap(a, b, min_length3):
start 0
while True:
start (b[:min_length], start)
if start -1:
return 0
if (a[start:]):
return len(a) - start
start 1
```
通过此方法获得最大重叠片段。
构建找出字符串集中的最大重叠字符串对方法
```python
import itertools
from itertools import permutations
def pick_maximal_overlap(reads, k):
read_a, read_b None, None
best_olen 0
for a, b in (reads, 2):
olen overlap(a, b, min_lengthk)
if olen > best_olen:
read_a, read_b a, b
best_olen olen
return read_a, read_b, best_olen
```
构建此方法来获得字符串集中的最大重叠字符串对,并移除这两条字符串,添加合并后的字符串。
贪心算法求最短的超级串
```python
def greedy_scs(reads, k):
read_a, read_b, olen pick_maximal_overlap(reads, k)
while olen > 0:
(read_a)
(read_b)
(read_a read_b[olen:])
read_a, read_b, olen pick_maximal_overlap(reads, k)
return ''.join(reads)
```
通过不断的迭代,获得最短的超级串。
运行结果
运行结果如下:SCS(shortest common supperstring)是指包含一个字符串集的最小字符串。字符串集中的字符串为其子串。
对贪心算法的理解
这是一个简单的找钱问题。为了求得满足找回金额的最小纸币数。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。