【发布时间】:2019-05-30 11:51:16
【问题描述】:
给定以下数据:
[4]
[5, 8]
[9, 12, 20]
[10, 15, 23, 28]
[14, 19, 31, 36, 48]
[15, 22, 34, 41, 53, 60]
[19, 26, 42, 49, 65, 72, 88]
[20, 29, 45, 54, 70, 79, 95, 104]
[24, 33, 53, 62, 82, 91, 111, 120, 140]
[25, 36, 56, 67, 87, 98, 118, 129, 149, 160]
[29, 40, 64, 75, 99, 110, 134, 145, 169, 180, 204]
[30, 43, 67, 80, 104, 117, 141, 154, 178, 191, 215, 228]
[34, 47, 75, 88, 116, 129, 157, 170, 198, 211, 239, 252, 280]
[35, 50, 78, 93, 121, 136, 164, 179, 207, 222, 250, 265, 293, 308]
[Etc.]
对于查找给定数字,具有最佳时间复杂度的最佳搜索算法可能是什么?
- 行已排序
- 列已排序
- 一个数字可能出现多次
额外信息:
假设我们正在寻找数字 26:
由于顺序,这意味着我们可以消除前 3 行和右侧的剩余列。
由于顺序,这也意味着我们可以忽略 row=11 之后的每一行。
结果如下:
[10, 15, 23]
[14, 19, 31]
[15, 22, 34]
[19, 26, 42]
[20, 29, 45]
[24, 33, 53]
[25, 36, 56]
[29, 40, 64]
我当前的算法的时间复杂度为 O(x log(y)),其中 x 是列的数量,y 是每列的二分搜索算法的大小。
我正在寻找更快的东西,因为我要处理大量数据。
目前我在每一列上都使用 BST,但我也可以在行上使用 BST 吗?可能实现 O(log(x) log(y))?
【问题讨论】:
标签: algorithm search time time-complexity