我有两个数组。Array1持有医学术语,而array2持有普通英语术语。医学术语数组中有一些非医学英语单词(在array1中重复)。在array1中有20,000个,在array2中超过15000个。用delphi比较两个数组并从array1中删除重复单词的最快方法是什么?
发布于 2012-12-13 13:29:27
如果数组未排序,这种方法会更快: 1.将array2中的所有单词放入字典中。2.运行array1,在字典中查找每个单词,如果找到则将其删除。
步骤1和步骤2都需要O(n)时间。
如果您使用的是较旧版本的delphi,则必须使用dictionary类,该类位于delphi安装的MemIni.Pas文件中,如THashedStringList。对于非常大的N,它会退化,但对于大约20.000个条目,它仍然非常快。
可以在here中找到一个非常快速的实现,它能够存储和查找O(1)中数以亿计的字符串。这篇文章是德语的,但代码是英语的,可以理解。
发布于 2012-12-13 11:38:43
如果您的数组已排序,请保留两个指针-- p1
和p2
指向array1
和array2
。初始化它们以指向array1
和array2
的第一个元素。
对于从第一个条目开始的array1
中的每个条目,查看它是否是单词array2p2。如果是,只需将其从array1
中删除。如果不是,则递增p2
直到
( (array1[p1] >= array2[p2]) and (array1[p1] < array2[p2+1]) ),
如果找到匹配项,则删除array1[p1]
。
需要O(n)
时间。在O(nlogn)
时间中有排序算法。
https://stackoverflow.com/questions/13852369
复制相似问题