Go 中的切片元素访问复杂度是多少?

我认为它是 O(1),但这是来自 pprof 输出:


140    140  176:    var lastSB byte = s[lenSMinusOne]

88     88   177:    var lastSuffixB byte = suffix[lenSuffixMinusOne]

并且 s 的平均长度大于后缀的长度。因此,这表明如果切片更大,访问元素需要更长的时间?


功能是:


func hasSuffix(s, suffix []byte) bool {


    lenSMinusOne      := len(s)      - 1

    lenSuffixMinusOne := len(suffix) - 1


    var lastSB byte = s[lenSMinusOne]

    var lastSuffixB byte = suffix[lenSuffixMinusOne]


    if lenSMinusOne < lenSuffixMinusOne {

        return false

    } else if lastSB != lastSuffixB {

        return false

    } else {

        for i := 0; i < lenSuffixMinusOne ; i++ {

               if suffix[i] != s[lenSMinusOne-lenSuffixMinusOne+i] {

                        return false

               }

        }

    }

    return true

}

更新:为了重现结果,安装fetch使用带有大型语料库的go-porterstemmer fork(我使用 440mb 文件)。


MM们
浏览 248回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go