相关疑难解决方法(0)

字符串切片的时间复杂度

切片Python字符串的时间复杂度是多少?鉴于Python字符串是不可变的,我可以想象将它们切片为O(1)或者O(n)取决于切片的实现方式.

我需要编写一个迭代一个(可能很大)字符串的所有后缀的函数.我可以通过将后缀表示为整个字符串的元组加上一个开始读取字符的索引来避免切片,但这很难看.如果相反,我天真地写这样的函数:

def do_something_on_all_suffixes(big_string):
    for i in range(len(big_string)):
        suffix = big_string[i:]
        some_constant_time_operation(suffix)
Run Code Online (Sandbox Code Playgroud)

... ...将其时间复杂度是O(n)或,其中是?O(n2)nlen(big_string)

python time-complexity

22
推荐指数
1
解决办法
8883
查看次数

为什么使用切片[:]比使用明显的方式更快地复制列表?

为什么使用切片对列表进行浅层复制比使用list内置更快?

In [1]: x = range(10)

In [2]: timeit x_ = x[:]
10000000 loops, best of 3: 83.2 ns per loop

In [3]: timeit x_ = list(x)
10000000 loops, best of 3: 147 ns per loop
Run Code Online (Sandbox Code Playgroud)

通常当我看到这样奇怪的事情时,它们在python3中被修复 - 但这种差异仍然存在:

In [1]: x = list(range(10))

In [2]: timeit x_ = x[:]
10000000 loops, best of 3: 100 ns per loop

In [3]: timeit x_ = list(x)
10000000 loops, best of 3: 178 ns per loop
Run Code Online (Sandbox Code Playgroud)

python performance cpython list shallow-copy

14
推荐指数
1
解决办法
350
查看次数

std::string::substr 成员函数的复杂度是多少?

std::string::substr成员函数的复杂度是多少?它是由标准定义的还是由实现定义的?

c++

6
推荐指数
2
解决办法
1万
查看次数