python str.index 时间复杂度 [英] python str.index time complexity

查看:33
本文介绍了python str.index 时间复杂度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为了在字符串中找到子字符串的位置,一个简单的算法将花费 O(n^2) 时间.但是,使用一些有效的算法(例如 KMP 算法),这可以在 O(n) 时间内实现:

For finding the position of a substring, inside a string, a naive algorithm will take O(n^2) time. However, using some efficient algorithms (eg KMP algorithm), this can be achieved in O(n) time:

s = 'saurabh'
w = 'au'

def get_table():
    i = 0; j = 2 
    t = []
    t.append(-1); t.append(0)
    while i < len(w):
        if w[i] == w[j-1]:
            t.append(j+1)
            j += 1
        else:
            t.append(0)
            j = 0 
        i += 1
    return t

def get_word():
    t = get_table()
    i = j = 0 
    while i+j < len(s):
        if w[j] == s[i+j]:
            if j == len(w) - 1:
                return i
            j += 1
        else:
            if t[j] > -1: 
                i = i + j - t[j]
                j = t[j]
            else:
                i += 1
    return -1

if __name__ == '__main__':
    print get_word()

然而,如果我们这样做:'saurabh'.index('ra'),它是否在内部使用了一些有效的算法来在 O(n) 或它使用复杂度O(n^2) ?

However, if we do: 'saurabh'.index('ra'), does it internally uses some efficient algorithm to compute this in O(n) or it uses naive algorithm of complexity O(n^2) ?

推荐答案

在那篇文章 [1] 中,作者详细介绍了算法并对其进行了解释.来自文章:

In that article [1] author goes through the algoritm and explains it. From article:

The function "fastsearch" is called. It is a mix between 
Boyer-Moore and Horspool algorithms plus couple of neat tricks.

来自 Boyer–Moore–Horspool 算法 [2] 的 wiki 页面:

And from the wiki page of Boyer–Moore–Horspool algorithm [2]:

The algorithm trades space for time in order to obtain an 
average-case complexity of O(N) on random text, although 
it has O(MN) in the worst case, where the length of the 
pattern is M and the length of the search string is N.

希望有帮助!

[1] http://www.laurentluce.com/posts/python-string-objects-implementation

[2] https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore%E2%80%93Horspool_algorithm

这篇关于python str.index 时间复杂度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆