我有以下问题,并在我的尖叫声与哈希的解决方案:如何在一个巨大的数字列表中找到两个数字,其中xi = xj?
问题:
鉴于巨大的号码列表,x1........xn
其中xi <= T
,我们想知道是否 或不存在两个指数i,j
,其中x_i == x_j
。
在O(n)
运行时间中找到算法,并且期望值为O(n)
。
我此刻解决方案:我们使用散列,我们将使用chaining
有一个映射功能h(x)
。
首先 - 我们建立一个新的数组,我们称之为A
,其中每个单元格都是一个链表 - 这将是目标数组。
现在我们运行所有n
数字,并使用散列函数将x1........xn
中的每个元素映射到合适的位置。这将需要O(n)
运行时间。
之后我们将在A
上运行,并寻找冲突。如果我们找到一个单元,其中length(A[k]) > 1
然后我们返回xi
和xj
映射到存储在A[k]
中的值 - 对于最差的情况,总运行时间将是O(n)
,如果两个数字的映射值(如果它们确实存在)在A
的最后一个单元格中。
哈希还需要'O(n)'空间。这是否允许? (考虑到它是一个巨大的数字列表) – Groo
@Goo:关于这个空间没有什么可说的,那么我想这是不言而喻的。 – ron
是T
wildplasser