Create Function [dbo].[LD](@Str1 Varchar(8000),@Str2 Varchar(8000))
Returns Numeric(18,3)
As
Begin
Declare @I int
Declare @J int
Declare @A int
Declare @B int
Declare @C int
Declare @K int
Declare @Rst Numeric(18,3)
Declare @Matrix Table (i int,j int,val int)
Insert into @Matrix Values(0,0,0)
Set @i=1
While @i<=Len(@Str1)
Begin
insert into @Matrix Values(@i,0,@i)
Set @I=@I+1
End
Set @j=1
While @j<=Len(@Str2)
Begin
insert into @Matrix Values(0,@j,@j)
Set @j=@j+1
End
Set @i=1
While @I<=Len(@Str1)
Begin
Set @j=1
While @J<=Len(@Str2)
Begin
If (substring(@Str1, (Select Val From @Matrix Where i=0 And j=@j), 1) = substring(@Str2, (Select Val From @Matrix Where i=@I And j=0), 1))
Select @C =Val From @Matrix Where i=@i-1 And j=@j - 1
Else
Select @C =Val+1 From @Matrix Where i=@i-1 And j=@j - 1
Select @A =Val+1 From @Matrix Where i=@i - 1 And j=@j
Select @B =Val+1 From @Matrix Where i=@i And j=@j-1
If (@A <= @B and @A <= @C)
Insert Into @Matrix Values( @i,@j,@A)
If (@B <= @C and @B <= @A)
Insert Into @Matrix Values( @i,@j,@B)
If (@C <= @A and @C <= @B)
Insert Into @Matrix Values( @i,@j,@C)
Set @J=@J+1
End
Set @I=@I+1
End
If Len(@Str1) > Len(@Str2)
Set @K = Len(@Str1)
Else
Set @K = Len(@Str2)
Select @Rst=1-1.0*Max(Val)/@K From @Matrix Where i= Len(@Str1) And j= Len(@Str2)
return @Rst
End
LD算法
最新推荐文章于 2026-06-20 22:17:21 发布

591

被折叠的 条评论
为什么被折叠?



