【发布时间】:2013-01-12 16:34:15
【问题描述】:
我遇到了以下问题:
给定 2 个包含 N 个数字的文件
file1.dat: 1,2,3,4,5,6,7,8,9,0
file2.dat: 2,5,4,7,6,9,8,1,0,3
file2.dat 实际上只是第一个的改组版本。 我想知道第一个文件中两个连续数字的顺序在第二个文件中改变了多少次(包含相同的数字)。例如,在文件一中我们开始寻找1和2,在第二个文件中,2在1之前,所以顺序发生了变化;在第一个文件中有 9,然后是 0,在第二个文件中,这个顺序保持不变,因为 9 在 0 之前。
我使用的实际数据大致由 26000 个数字组成,它们都是不同的。
我想到了类似的东西:
for(i=0; i<N-1; i++)
for(j=0; j<N; j++)
for(k=0 ; k<N; k++)
if(B[j]==A[i] && B[k]==A[i+1] && k < j )
count++
print("The number of inversion is: %d\n",count)
但我不知道如何在 awk 中编写它(我写了一个小 C 程序,但需要 5 个多小时才能给我答案)而且我不知道类似的东西是否可以给我一个结果合理的时间。
【问题讨论】:
-
为什么你要解决这个是Bash还是AWK?您是否以某种方式假设脚本语言中的相同解决方案会比 C 中运行得更快?
-
这就是我所希望的,也因为它们是我所知道的仅有的两种语言。如果 C 失败,我希望 BASH 或 AWK 能做得更快。
-
你只关心那些邻居对吗?例如在file2 4..1中的file1 1..4中,这是否也应该计算在内?顺便说一句,你能给出你的 file1,file2(10 个数字)例子的正确答案/结果吗?
-
如果您的 C 程序需要 5 个小时才能运行,那么问题在于您的算法而不是您正在编程的工具,并且在 bash 或 awk 中该算法的任何实现都将比在 C 中运行得慢所以这可能不是最好的建议论坛——你需要的是算法,而不是工具。
-
你现实世界中file1中的数字是否也遵循规则..i-1, i, i+1..?还是..i-n, i, i+n...?