【问题标题】:Time complexity of sorting a list in descending order.按降序对列表进行排序的时间复杂度。
【发布时间】:2014-07-31 18:07:19
【问题描述】:

我有一组变量及其相关值存储在数据库中。

var1  var2  corr  

我的算法涉及按降序(基于相关值)对列表进行排序,然后检索前 k 对。

这个算法的时间复杂度是多少?这取决于我如何排序吗?我正在使用 ORDER BY 子句通过 sql 查询对列表进行排序。

【问题讨论】:

  • 您使用的是哪个 SQL 平台?您是否在corr 上定义了索引
  • 这个问题的答案将是特定于实现的。
  • @Hogan 我使用的是 SQL Server 2010,但表中没有索引。
  • @SaadH - 仍然取决于平台,但可能 O(log N)。测试一下。

标签: sql algorithm sorting time-complexity


【解决方案1】:

SQL 数据库管理多级内存——基本上是内存中的数据页和磁盘上的存储。传统的复杂性度量不能很好地捕捉 SQL 查询的性能特征。为此,您需要了解执行计划、底层算法以及相对于可用资源的数据大小。

我的下一个反应是:如果你需要对数据进行排序,那么就对数据进行排序。时间复杂度与它有什么关系?也就是说,您还有哪些其他选择?

通常,在数据库中实现的排序将具有 O(n log(n)) 复杂度。但是,实际速度在很大程度上取决于其他因素。列上的索引降低了复杂性。适合内存的数据会更快。适合单个页面的数据可能会更快。

我不确定您所说的“这取决于我的排序方式吗?”。在 SQL 中只有一种表达顺序的方法,使用order by 子句,而且它没有很多选项。按ascdesc 排序应该对性能没有影响或影响很小。

【讨论】:

  • 感谢您的评论。我那句话的意思是,如果算法是使用编程语言而不是 SQL 实现的,时间复杂度会改变吗?
  • 还是没看懂问题。 “排序”是一项任务。它有很多算法。如果您实现数据库中使用的相同算法,它们将具有相同的复杂性。
  • 所以没有索引的排序会有 O(n*logn) 的复杂度?或者如果没有您提到的其他因素,我们无法确定?
  • @SaadH 。 . .它是特定于实现的。最合理的排序算法是 O(n*logn)。没有理由认为数据库开发人员会不合理。
猜你喜欢
  • 2017-08-05
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
  • 2016-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多