优化后的Levensthein distance算法实现

本文介绍了一种改进的Levenshtein距离算法实现,通过仅使用两个列向量代替整个矩阵,显著降低了内存消耗并提高了算法效率,特别适用于处理较长字符串间的编辑距离计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在上一篇文章Levenshtein distance算法实现中,笔者已经讲解了一般最小编辑距离的算法。该算法采用动态规划,时间复杂度是O(m*n),m,n分别为两个字符串的长度,而空间复杂度也是O(m*n),如果使用int作为矩阵元素的类型,则矩阵的占用空间大小为sizeof(int)*m*n,假如两个字符串的长度均为10000个字符,则矩阵大小为400MB,相当可观。参考一个快速、高效的Levenshtein算法实现,笔者重新实现了一遍Levenshtein distance算法,其主要思想就是利用两个列向量来代替矩阵,每次只保存当前状态和上一次运算状态,算法结束后并不能获得该两个字符串任意子序列之间的最小编辑距离。算法采用Python实现,代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'xanxus'
s1, s2 = raw_input('String 1:'), raw_input('String 2:')
m, n = len(s1), len(s2)
colsize, v1, v2 = m + 1, [], []
for i in range((n + 1)):
    v1.append(i)
    v2.append(i)
for i in range(m + 1)[1:m + 1]:
    for j in range(n + 1)[1:n + 1]:
        cost = 0
        if s1[i - 1] == s2[j - 1]:
            cost = 0
        else:
            cost = 1
        minValue = v1[j] + 1
        if minValue > v2[j - 1] + 1:
            minValue = v2[j - 1] + 1
        if minValue > v1[j - 1] + cost:
            minValue = v1[j - 1] + cost
        v2[j] = minValue
    for j in range(n + 1):
        v1[j] = v2[j]
print v2[n]
由于内存分配减少了,所以算法的效率也能提高一点,即使时间复杂度没有改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值