Python 排序列表或创建二叉搜索树并按顺序遍历是否更快?
以下哪种方法更好Python 排序列表或创建二叉搜索树并按顺序遍历是否更快?,python,algorithm,sorting,binary-search-tree,Python,Algorithm,Sorting,Binary Search Tree,以下哪种方法更好 对元素列表进行排序,或 从一个列表创建一个二叉搜索树,然后创建另一个执行顺序遍历的列表 实际上,我所要做的就是有一个值列表,根据这些值的位置,给它们分配一个等级 假设我有一个列表: [33735, 0, 1368, 5400, 123, 2317, 43654, 243730] 我希望以排序的方式对值进行排序,然后分配秩。 我应该使用哪种方法?我认为在这种情况下,树有点过分了,除非您需要在维护列组的同时频繁更新集合。否则,您只需在排序列表中循环: l = [33735, 0,
[33735, 0, 1368, 5400, 123, 2317, 43654, 243730]
我希望以排序的方式对值进行排序,然后分配秩。
我应该使用哪种方法?我认为在这种情况下,树有点过分了,除非您需要在维护列组的同时频繁更新集合。否则,您只需在排序列表中循环:
l = [33735, 0, 1368, 5400, 123, 2317, 43654, 243730]
for rank, item in enumerate(sorted(l)):
# do what you need
print rank, item
渐进地说,它们是一样的 点#2本身实际上是一种排序算法,称为,具有
O(n log n)
最坏情况下的运行时间(假设我们使用的是a)
任何基于比较的排序(大概是#1)也可以
实际上,一个库排序函数(可能会使用类似于,或者命名为3)可能会更快(树排序涉及大量开销)(如果不是,一般来说,他们可能会用树排序替换该算法)
当然,我假设数据没有什么特别之处,这可以使#1更快 ,它在具有某些特征的不同类型的数据(通常是数字数据)上表现更好
如果数据已经大致排序,将实际运行在
O(n)
哪个方法在您的测试中表现更好?可以使用二进制搜索访问python中的排序列表。现在我使用的是二叉树顺序遍历方法,它工作得很好。但我只是想知道,既然我最终得到了一个排序的列表,那么为什么不对列表进行排序并使用它呢?这个列表是通过每次访问某个页面时点击数据库创建的。如果结构根本没有被重用,构建BST毫无意义。那么您应该使用ORDERBY sql close或其等效工具,让DBMS为您处理排序。会快得多。谢谢你的澄清。。我想我宁愿使用第一种方法。