2012-10-25 59 views
0

我有这样怎么样的数据结构树在这种情况下

A 100 200 
A 120 220 
B 140 250 

另一个文件是这样的

A 130 210 
A 133 215 
B 180 270 

然后,我必须从第一个文件的每一行比作一个文件来实现每行第二个文件并查找哪些行有交叉坐标

输出将是这样的

A 100 200 A 130 210 
A 100 200 A 133 215 
A 100 200 A 180 270 

它就是这样。

在我的代码中,它是这样的代码,我从第一个文件中得到第一行,并与第二个文件的所有行进行比较。

所以我想知道如何实现一个像数据结构这样的树来完成这个任务,这样复杂度就是日志规模。

+0

交叉坐标是什么意思? – pogo

回答

3

你不需要树形数据结构。如果您的文件按照第一个坐标排序,则可以在线性时间内轻松完成。只需为每个保存当前相关行的文件保留一个缓冲区,并且您只需将两个文件的缓冲区同步。重点是,与其他文件的给定行的交集相关的行将始终彼此相邻,因此,您知道一旦放弃了一行,就不必再检查它了(因为文件是排序)。

+0

你能解释一下如何将文件加载到缓冲区并从那里进行比较? - 感谢 –

+0

@ dissw.geek9缓冲区可以简单地是一个行数组,您可以从文件中读取行并添加到数组的末尾,而您总是从数组的开始处放弃。这与队列或FIFO数据结构相似。 – Bitwise

+0

在perl中将文件加载到缓冲区的命令是什么? –