【问题标题】:How to keep a sorted list while entering data into it in Python如何在 Python 中输入数据时保持排序列表
【发布时间】:2016-08-24 21:06:48
【问题描述】:

我有一个列表列表,需要根据列表的长度进行排序。我现在正在做的是首先将列表插入主列表,然后对主列表进行排序,给出key=len。此步骤将花费n + nlg(n) 的总时间。将数据输入主列表时是否可以维护排序列表?可以使用 bisect 来完成(或者有更好的方法)吗?如果可以,它的性能会比n + nlg(n) 更好吗?

【问题讨论】:

标签: python list sorting asymptotic-complexity


【解决方案1】:

这取决于您使用的数据结构:

  • Dynamic Array
    • 在已排序的数组上找到正确的索引是 O(log n) 使用平分法
    • 插入是O(n),因为您必须转移所有内容
    • 总计 `O(n)
  • Linked List
    • 在已排序的链表上查找正确的索引需要浏览该列表直到到达那里。 (O(n))
    • 插入是一个简单的操作,只需要O(1)
    • 总计O(n)
  • Self-balancing BST
    • 在维持订单的同时插入,余额为O(log n)摊销
    • this question 中有实现的链接
  • Heap。不完全是您所要求的,但根据您使用的实现,插入堆是O(log n)Theta(1)。 python 中的heapq 是一种实现。您只需将项目推送到堆中,完成后即可在O(n) 中获得排序结果。同时,您可以在O(1) 中访问树的根,在O(k) 中访问最小的、已排序的k。

【讨论】:

    猜你喜欢
    • 2012-09-01
    • 1970-01-01
    • 2015-10-11
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    相关资源
    最近更新 更多