【问题标题】:What would achieve a O( N/logN) complexity?什么会达到 O( N/logN) 复杂度?
【发布时间】:2023-02-23 08:13:12
【问题描述】:

我正在阅读this sqlite documentation,并在他们的有序查找中看到了这句话:

由于信息以 rowid 顺序存储在表中,SQLite 可以使用二进制搜索找到正确的行。如果表包含 N 个元素,则查找所需行所需的时间与 logN 成正比,而不是像在全表扫描中那样与 N 成正比。如果该表包含 1000 万个元素,则意味着查询的速度将达到 N/logN 的数量级或大约快 100 万倍。

我以前从未见过 N/logN 复杂性被引用过。为什么是 N/logN 而不是 logN 查找?粗略搜索说它来自数组中的分桶有序段。是因为内存限制了二进制搜索段的大小,数据集足够大吗?

如果是这样,N/logN 是如何计算的?是否有任何其他使用 N/logN 复杂性的实际应用程序?

【问题讨论】:

  • 如果我可以在 T1 时间做一件事,在 T2 时间做另一件事,其中 T2>T1,那么做第一件事比做另一件事快 T2/T1 倍。
  • 嗯,有道理。我被措辞迷住了。谢谢!尽管如此,我还是很好奇是否有任何 N/logN 复杂性的真实示例。
  • 没有例子,但最多 N 的素数是 O(N log(N))

标签: algorithm sqlite data-structures big-o


【解决方案1】:

O(n/log n) 运行时间的一个来源是在对 (log n) 位字(单位成本随机存取机)进行恒定时间操作的机器模型中的位并行性。一个 n 位位图占用 O(n/log n) 个字,因此并集、交集、差集等都需要时间 O(n/log n)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2018-08-05
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    相关资源
    最近更新 更多