我有一个像这样的文件说input.dat
column1 column2
0 0
1.3 1.6
1.8 2.1
2.0
2.6
我需要从第1列中提取最接近第2列的值的子集,以便两列中的条目总数相等。 在这个例子中,我需要获得输出
column1 column2
0 0
1.8 1.6
2.0 2.1
我怎么能得到这个?
答案 0 :(得分:5)
使用bash脚本可以做到这一点,如果这是你的限制,但用Python / C ++ / Java处理这样的问题会更容易,因为这是优化的二分匹配问题的一个版本(你' d如果在脚本中完成,则必须重复读取每一行,或者使用大量辅助变量)
==>如果我们可以假设两列中的值都被排序和增加,那么一个天真的解决方案就是:
对于第二列中的每个值:
这是m * n的最坏情况运行时间,其中m是col1中的#个条目,n是col2中的#个条目,o(n)的平均运行时间如果你聪明并且进行恒定时间交替检查(从最后选择的col1_value的索引比较-1,+ 1,因为-2,+ 2等当然会导致更大的差异)而不是顺序的,以找到col2中的当前值和vol1中的值之间的最小差异。
这是一个天真的解决方案,因为它不会最小化系统中的整体差异。最佳解决方案是NP,因此对于大型数据集,您可能做的最好的是使用一种近似图形算法进行匹配。