首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在delphi中比较两个数组并从一个数组中去掉重复项

如何在delphi中比较两个数组并从一个数组中去掉重复项
EN

Stack Overflow用户
提问于 2012-12-13 11:16:24
回答 2查看 1.1K关注 0票数 0

我有两个数组。Array1持有医学术语,而array2持有普通英语术语。医学术语数组中有一些非医学英语单词(在array1中重复)。在array1中有20,000个,在array2中超过15000个。用delphi比较两个数组并从array1中删除重复单词的最快方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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)中数以亿计的字符串。这篇文章是德语的,但代码是英语的,可以理解。

票数 2
EN

Stack Overflow用户

发布于 2012-12-13 11:38:43

如果您的数组已排序,请保留两个指针-- p1p2指向array1array2。初始化它们以指向array1array2的第一个元素。

对于从第一个条目开始的array1中的每个条目,查看它是否是单词array2p2。如果是,只需将其从array1中删除。如果不是,则递增p2直到

代码语言:javascript
运行
复制
( (array1[p1] >= array2[p2]) and (array1[p1] < array2[p2+1]) ),  

如果找到匹配项,则删除array1[p1]

需要O(n)时间。在O(nlogn)时间中有排序算法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13852369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档