Algorithm 在100个不同文件中查找前10个整数

Algorithm 在100个不同文件中查找前10个整数,algorithm,Algorithm,我是一名新生,正在为面试做准备。在我最近的采访中,有人问了我一个问题,我找不到合适的答案 我得到了大约100个文件,每个文件都包含大量逗号分隔的整数。我必须在所有文件中找到前10个整数。我试图用heap来解决这个问题。但我对这个过程的时间复杂性感到困惑。非常感谢您的帮助。我认为您使用堆数据结构是正确的 您可以并行处理这些文件,并且对于每个文件,您可以保持最小大小为10的堆 在遍历文件时,将一个值插入最小堆,直到其满(大小为10),然后插入位置11到n的值 if current_value >

我是一名新生,正在为面试做准备。在我最近的采访中,有人问了我一个问题,我找不到合适的答案


我得到了大约100个文件,每个文件都包含大量逗号分隔的整数。我必须在所有文件中找到前10个整数。我试图用heap来解决这个问题。但我对这个过程的时间复杂性感到困惑。非常感谢您的帮助。

我认为您使用堆数据结构是正确的

您可以并行处理这些文件,并且对于每个文件,您可以保持最小大小为10的堆

在遍历文件时,将一个值插入最小堆,直到其满(大小为10),然后插入位置11到n的值

if current_value > min_heap.current()
    min_heap.extract()
    min_heap.insert(current_value)
您必须遍历n个值,最坏的情况是文件按升序排序。在这种情况下,您必须提取最小值,并为位置11到n的所有值插入一个新值。堆操作将是O(logn),为每个文件提供O(n*logn)的总运行时间

在这一点上,您有m个(文件)最小堆,每个堆的大小为10。在这里,您可以使用最后一个min堆来存储m min堆中包含的十个最大数字。此计算将为O(m),因为此时所有堆的最大大小为10,这是一个常量

总的来说,运行时间为O(n*logn+m)。m可能比n小很多,所以在朋友中我们可以说O(n*logn)


即使不并行执行第一步,也将是O(m*n*logn+m),但如果n支配m,我们可以再次说O(n*logn)。

相关/可能重复-。文件是否包含唯一的数字?也就是说,数字42能在一个文件中多次出现吗?你是在寻找最大的10个整数,还是出现次数最多的10个整数?我被问到了整个文件中最大的10个整数谢谢你的算法,它帮助我摆脱了困惑:)你的算法不起作用。假设您正在寻找三个文件中最常见的数字(只有一个)。在这些文件中,数字7在每个文件中出现8次。但它是每个文件中第二个最常见的数字。在每个文件中,都有一些其他数字出现的频率更高,但总的来说,数字7比任何其他数字出现的频率都高。你的算法会给出错误的答案。我误解了“前10位整数”。我认为这是指文件中最大的整数,而不是出现次数最多的整数。根据这种解释,您的算法可以工作。而OP的问题是模棱两可的。所以你可能不该被否决。我倒过来了。