gpt4 book ai didi

algorithm - 优化 O(n^2) 算法所需的建议

转载 作者:可可西里 更新时间:2023-11-01 14:15:55 24 4
gpt4 key购买 nike

我正在寻求优化目前相当简单的算法O(n2)。我有一个记录文件,其中每个人都需要在同一个文件中相互比较。如果两者是'same'(比较器函数相当复杂),匹配的记录输出。请注意,可能有多个记录匹配彼此,并且没有顺序感 - 仅当匹配为 True 或 False 时。

伪代码:


For (outRec in sourceFile) {
Get new filePointer for targetFile //starting from the top of the file for inner loop
For (inRec in targetFile) {
if (compare(outRec, inRec) == TRUE ) {
write outRec
write inRec
}
increment some counters
}
increment some other counters
}

数据没有以任何方式排序,也没有预处理可以订购数据。

任何关于这如何变得不那么重要的想法O(n2)?我正在考虑应用 MapReduce 范式在代码上,打破外部和内部循环,可能使用链式映射函数。我很确定我已经弄清楚了代码Hadoop,但想在花时间编码之前检查替代方案

感谢建议!

添加:记录类型。基本上,我需要匹配名称/字符串。这匹配类型如下例所示。


1,Joe Smith,Daniel Foster<br/>
2,Nate Johnson,Drew Logan<br/>
3,Nate Johnson, Jack Crank<br/>
4,Joey Smyth,Daniel Jack Foster<br/>
5,Joe Morgan Smith,Daniel Foster<br/>
<br/>
Expected output:
Records 1,4,5 form a match set
End of output

补充:这些文件会很大。最大的文件是预计将有大约 2 亿条记录。

最佳答案

我不确定你的比较器和数据集的属性,但假设你的比较器在你的行上定义了一个等价关系,这里什么也没有:

  1. 为输入文件创建一个映射,并使用比较器函数作为映射的关键比较器。 map 值是行的序列/列表,即所有“相同”的行被连续添加到同一 map 条目)。花费 O(n*log n) 时间。
  2. 遍历其他文件的行并检查每一行是否与映射中的键匹配。在这种情况下,由于比较器隐含的等价关系,您知道该行与该映射条目值中的所有行“相同”。需要 O(n* log n + C),具体取决于您必须输出多少匹配项。

请注意,在最坏的情况下,根据您的问题描述,您无法获得比 O(n^2) 更好的结果,这仅仅是因为您必须输出匹配记录的 O(n^2) 结果!

关于algorithm - 优化 O(n^2) 算法所需的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6665151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com