C从列表中查找字符串的子集

时间:2013-03-15 23:11:04

标签: c search

我有一个1M条目的列表,我想要排除这些条目中的20,000个子集(这两个列表的顺序不同,具有相同的键(字符串))。任何人都可以在C中建议使用快速搜索算法吗?

我不想阅读每个20K ID,每次都要查看1M列表。任何建议都会有所帮助。

谢谢。

3 个答案:

答案 0 :(得分:2)

您要使用的是哈希集。哈希集是哈希表的一种特殊情况,它基本上以恒定时间记录集合中是否存在元素。那么,你要做的是将你的20k ID插入到哈希集中,然后运行100万个字符串,看看它们是否存在于哈希集中。

供您参考,这里是C语言中哈希集的实现:https://github.com/avsej/hashset.c

您的运行时间将为O(n),因为对于1M字符串的每次检查,它将是恒定时间。

答案 1 :(得分:0)

首先对两个列表进行排序。然后你可以一起遍历它们,推进指针在另一个指针后面的列表中。

你必须使用C吗?这听起来像是Perl的工作。

答案 2 :(得分:0)

在开始搜索列表之前,将20,000个密钥包含在hash table中。然后,对于列表中的每个项目的键,如果在哈希表中找到该键,则从列表中排除该项目。