首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bisect.insort函数与list.index函数和插入函数的速度比较

bisect.insort函数与list.index函数和插入函数的速度比较
EN

Stack Overflow用户
提问于 2018-12-12 02:07:25
回答 2查看 1.7K关注 0票数 2

正如Python所说,我认为二分法模块比列表内置方法、索引和插入要快得多,以便将项插入到长顺序列表中。因此,我只需计算这两个函数( bisect_func()insert_func() )的时间开销,如下所示。

bisect_func()得分1.27s,insert_func()得分1.38s,这不是一个显著的时间差。我的问题是,在这个例子中,我是否遗漏了测试均分效率的东西?还是二分法不是将项目插入有序列表的唯一有效方法?

代码语言:javascript
复制
import bisect

HAYSTACK = [n for n in range(100000000)]
NEEDLES = [0, 10, 30, 400, 700, 1000, 1100, 2200, 3600, 32000, 999999]

def bisect_func():
    for needle in reversed(NEEDLES):
        bisect.insort(HAYSTACK, needle)

def insert_func():
    for needle in reversed(NEEDLES):
        position = HAYSTACK.index(needle)
        HAYSTACK.insert(position, needle)

if __name__ == '__main__':
    import time
    start = time.time()
    # bisect_func()
    insert_func()
    end = time.time()
    print(end - start)
EN

回答 2

Stack Overflow用户

发布于 2018-12-12 02:12:17

来自乱七八糟的文档

按排序顺序插入x。这相当于a.insert(a,x,lo,hi),x),假设a已经排序了。请记住,O(log )搜索是由缓慢的O(n)插入步骤主导的。

重要的部分是:记住O(log n)搜索是由缓慢的O(n)插入步骤主导的。因此,这两种方法最后都是O(n),这就是它们的效率相似的原因,因为insort稍微好一些。

票数 3
EN

Stack Overflow用户

发布于 2018-12-12 02:12:06

二进制搜索只提高了查找插入索引的性能。它没有改进列表中的插入,在这两种情况下都是O(N),并且控制了这两个函数的渐近复杂性。请记住,插入到基于数组的列表中需要在插入索引之后移动所有元素。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53735065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档