【发布时间】:2020-10-08 06:52:25
【问题描述】:
给定一个包含 n 个元素的数组和数组中的一个元素 x,有没有一种快速的方法可以在不排序的情况下找到 x 的秩?
由于我现在正在处理一个非常大的数组,因此具有 O(n) 时间复杂度的算法对于我来说仍然太慢而无法使用,这就是为什么我试图找到除排序之外的其他替代方法。
编辑:
所以现在我的算法是这样的:
for x in list:
A = x.dot(B) ## return a numpy array
rank = findRank(a, A) ## find the rank of a in A
doSomething2(rank)
所以这里我的瓶颈是findRank(),在我当前的实现中,我首先对数组进行排序,然后在排序后的数组中找到元素的排名。
【问题讨论】:
-
这就是 db 的用途。以 sql orderby 为例。如果您的数组太大以至于排序太慢,那么将其放入数据库中。您使用的是什么技术?
-
你需要一个 O(n) 算法:如果你不看一个元素,那个值可能会改变 x 的顺序。因此,您至少需要检查每个值。当然,除非您使用排序或其他一些数据结构来准备数组。
-
你需要对同一个数组的不同 x 进行多次查询吗?请提供更多问题详情
-
如果你每次都创建数组,你已经在创建上花费了 O(n) 时间,所以我不明白为什么你不会同时查找排名,或者这样做在 O(n) 过程中。
-
在编辑中,您描述了一个 O(nlogn) 的算法,但您应该通过简单的扫描和计数在 O(n) 中完成。