【发布时间】: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