首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么union不返回一个唯一的列表?

为什么union不返回一个唯一的列表?
EN

Stack Overflow用户
提问于 2012-05-30 23:24:16
回答 2查看 1.3K关注 0票数 2

为什么Hyperspec中的以下语句是这样的,有什么逻辑原因吗?如果list-1和list-2之间存在重复,则结果中只有一个重复的实例。如果list-1或list-2中有重复的条目,则冗余条目可能会出现在结果中,也可能不会出现。

在我读到这篇文章之前,我一直认为联合应该返回一个唯一的列表,并对我的代码为什么没有这样做感到沮丧。在列表之间而不是在列表内删除重复项似乎也很奇怪。为什么要指定这一点呢?

似乎应该能够假设联合将生成集合元素的唯一列表,或者我是否遗漏了什么?

有关Hyperspec的完整页面,请参阅http://clhs.lisp.se/Body/f_unionc.htm

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-31 03:25:11

如果您的代码只包含唯一元素的集合(如1 2 3 ),则UNION将保留此属性。

如果您的代码包含具有非惟一元素的集合(如1 2 2 3 ),则UNION不需要在结果集中强制实现唯一性。

删除重复项是通过一个单独的函数来完成的:REMOVE-DUPLICATES

票数 5
EN

Stack Overflow用户

发布于 2012-05-30 23:48:02

假设两个列表中作为UNION参数的元素都是唯一的,这意味着算法在最坏情况下(不可排序、不可哈希的元素)的复杂度为O(n*m)。另一方面,在这种情况下,删除列表中的重复项需要O(n^2)。即使在没有重复的情况下,让UNION删除重复项也会使运行时间增加大约三倍,因为大部分时间都被比较所消耗。

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

https://stackoverflow.com/questions/10819355

复制
相关文章

相似问题

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