我有以下作业问题: 假设给定两个n个元素的序列S1和S2,它们可能包含重复项,并在这些序列上定义了总顺序关系。描述确定S1和S2是否包含相同元素集的有效算法。分析该方法的运行时间
为了解决这个问题,我使用了retainAll和一个HashSet比较了两个数组的元素。
Set1.retainAll(new HashSet<Integer>(Set2));
这将在固定时间内解决问题。 我需要在keepAll步骤之前对两个数组进行排序以提高效率吗?
答案 0 :(得分:0)
我从您发布的代码中怀疑您缺少分配要点。这个想法不是使用Java库来检查两个集合是否相等(为此您可以使用collection1.equals(collections2)
。而是要提出一种用于比较这些集合的算法。JavaAPI没有指定一个算法:它隐藏在实现中。
在不提供答案的情况下,让我为您提供一个示例,该算法可以工作,但不一定有效:
for each element in coll1
if element not in coll2
return false
remove element from coll2
return coll2 is empty
问题表明序列是有序的(即定义了总顺序关系),这意味着您可以比上述算法做得更好。
通常,如果要求您演示算法,则最好坚持使用本机数据类型和数组-否则,库类的实现可能会极大地影响效率并隐藏要在算法本身上收集的数据。