2009 英特尔® 线程挑战赛 第三题 搜索!
第三个问题现已发布。您可以在 2009 年 5 月 22 日之前提交作品。请参见竞赛规则了解更多信息或者访问竞赛论坛寻求问题解答。祝您好运!
搜索
问题描述:写一个线程程序在一个线性存储且有序的唯一关键字集合中搜索给定关键字集合的所在位置。关键字是由15个字符组成的字符串,第一个输入文本文件包含有序关键字集合。第二个输入文本文件包含不定数量的关键字,这些关键字将在第一个文件中的关键字集合里进行查询。对于第二个输入文件中的每一个关键字在输出文件中都应该有对应的单行输出,输出信息包括关键字以及其在第一个文件中的下标,下标从0开始。如果待搜索关键字不在第一个文件中,那么将在输出文件中打印没有找到的信息。程序所涉及到的文件名(包括关键字集合文件,待搜索关键字集合文件,输出文件)将在命令行中给出。
文件格式:第一个输入文件的第一行是一个整数,代表文件中有序关键字集合的关键字数量(这里用N表示)。接下来存储的就是N行有序的关键字,每个关键字是15个字符的字符串。第二个文件包括待查询的不定数量的关键字集合,关键字同样是15字符的字符串,每行存储一个关键字。
输出文件应当与第二个输入文件有相同的输出行数。对于第二个文件中列出的每个关键字,在输出文件中都有对应的一行输出信息表明待搜索关键字以及在第一个文件中的下标或者未找到的信息。
输入文件样例 (data.txt):
10
123456789012345
AABBCCDDEEFFGGH
MMNNNNNNNNNNNNN
MMNNNNNNNNNNNNO
NNNNNNNNNN12345
NNNNNNNNNN12346
This is a key22
aabbCCDDEEFFGGh
mMNNNNNNNNNNNNN
not the lastkey
输入文件样例 (keysearch.txt):
MMNNNNNNNNNNNNN
NOT the lastkey
mMNNNNNNNNNNNNN
AABBCCDDEEFFGGH
AABBCCDDEEFFGG0
命令行样例:
> mysearch.exe data.txt keysearch.txt results.txt
输出文件样例 (results.txt):
MMNNNNNNNNNNNNN is found at index 2
NOT the lastkey is NOT FOUND
mMNNNNNNNNNNNNN is found at index 8
AABBCCDDEEFFGGH is found at index 1
AABBCCDDEEFFGG0 in NOT FOUND
限制条件:第一个输入文件中要搜索的数据,必须首先被读入一个一维数组,数组中每个元素包含一个关键字。下面的伪代码说明了一个可能的输入算法。
readfile(inputFD, &N);
for i = 0, N-1 {
A[i] = getkey(inputFD);
}
计时:如果你把计时代码放入你的应用程序中来对第二个文件关键字的输入,搜索和输出过程进行计时,然后打印所花时间,这个时间将用于计分。如果没有添加计时代码,整个执行时间(包括输入和输出的时间)将用于计分。如果没有遵循输入数据和存储的输入限制,整个执行时间将用于计分。
注:按照竞赛规则,参赛者除了提交解决方案代码之外,同时还需要提交其解决方案报告