如何确定一个非常大的数据集中是否存在数字

时间:2015-12-23 09:59:26

标签: algorithm

我想知道问题的合适答案是什么"给定一组非常大的数字写一个服务,如果一个数字在500毫秒内出现,它将返回#34;。会有数万亿的数字。这个问题应该测试我对可扩展性和架构的了解。我回答说我会将这组数字拆分成多个桶并将一个集合分配给一个特定的服务器,非常像HashMap将它的密钥划分为桶。在每个服务器中,服务器将维护类似于位数组的内容,这将标记出是否存在数字。他告诉我,如果数字很稀疏,那么我将使用平衡的二叉搜索树,如红黑或AVL树。我想这个问题会有多种解决方案。我想知道其他答案会是什么?

1 个答案:

答案 0 :(得分:1)

trillion10^12。 bigint的大小为8个字节。所以你有10^12 * 8 bytes = 7.27 terrabytes。

现在您可以轻松购买500美元的8TB disc,并且为16TB购买光盘并不困难。因此,您可以将所有这些存储在一台机器上,而无需使用花哨的多机器。然后,您只需对所有这些进行排序(将O(n * log n)进行大约2.8 * 10^13次操作。

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