如何计算一个数字是否存在于一个非常大的数据集中



我想知道"给定一组非常大的数字,编写一个服务,如果在500毫秒内出现数字,该服务将返回"这个问题的合适答案是什么。将会有数万亿的数字。这个问题是为了测试我对可伸缩性和体系结构的了解。我回答说,我会把一组数字分解成多个桶,然后把一组分配给一个特定的服务器,就像HashMap把它的键分解成桶一样。在每台服务器中,服务器都会维护一个类似于位数组的东西,它会标记出是否存在数字。他问我,如果数字非常稀疏怎么办,在这种情况下,我会使用平衡的二进制搜索树,比如红黑树或AVL树。我想这个问题会有多种解决方案。我想知道其他的答案是什么?

万亿是10^12。bigint的大小为8字节。所以你有10^12 * 8 bytes = 7.27地形字节。

现在,花500美元就可以轻松买到8TB光盘,而用16TB购买光盘也不难。所以你可以把所有的东西都储存在一台机器上,而不需要有一个花哨的多机器的东西。然后,您只需对所有这些操作进行排序(将采用O(n * log n),这大约是2.8 * 10^13操作

在我的机器上,Go程序可以在0.6秒内执行大约10^9运算,所以没有什么能阻止C程序在5小时内对这么多整数进行排序。这只做过一次。现在,要返回一个数字,您必须执行log 10^12操作,该操作小于50磁盘寻道,后者将在微秒内完成。

相关内容

最新更新