递归反向字符串的时间复杂度

时间:2016-10-10 23:54:24

标签: recursion time-complexity big-o

我想在以下代码中找到Big O中的时间复杂度:

ReverseString(S,x,y)
if x < y
    swap(S,x,y)
    return ReverseString(S,x+1,y-1)

我得到的等式是

T(1) = 1
T(n) = 3 + T(n+1)+ T(n-1)

如果我是对的,我将如何解决这个问题。

如果我不对,那么正确的等式是什么。

1 个答案:

答案 0 :(得分:0)

假设x和y是指向字符串末尾的指针,那么你的等式是错误的。这是一个简单的单一递归,但你假设是双倍的。此外,存在使T(n)依赖于T(n + 1)的严重问题;你真的不想在下标中 up 而没有保证的,有限的有限减少。

这样思考:每次迭代都会使x和y彼此靠近一个字符。您的单个递归遍历字符串的一半。我会将关系设为

Sub ForEach_Loop()

    Dim ws3 As Worksheet
    Dim row As Range

    Set ws3 = Worksheets("Sheet3")

    For Each row In ws3.Range("A2:M300").Rows

      If Application.CountA(row) = 1 And row.Cells(3).Value <> "" Then

        With row.Cells(3)
            row.Cells(6).Offset(-1, 0).Value = .Value
            .ClearContents
        End With

      End If

    Next row

End Sub

其中n是字符串长度的一半(如果是奇数则截断)。