2016-04-23 141 views
1

我有一个充满文字的文本文件。我想将这些单词中的每一个添加到哈希集。我也有一个我不想要的单词的哈希集。这两种解决方案哪一种更高效? (Java Hashset)

它是更有效的:

  • (A)将所有的话我想HashSet的和删除我不想在最后字的HashSet的。 (B)检查每个单词是否在我不想要的单词的哈希集合中,如果是,则忽略它。如果不是,则将它添加到我想要的单词集合中。

编辑
有更的话我想,不是的话我不想。

+0

我投票选项B.为什么要添加你不想删除它们的单词? –

+0

你得到的答案是可怕的。实际上,两种方法的性能都是相似的。假设你的文本文件中有更多的单词比你不想要的单词集更多,那么(A)会更快,因为它需要更少的散列集检查。它可以达到两倍的速度,取决于文本文件中每个单词出现的次数。 –

+0

@MattTimmermans关心你的两美分答案? – Nai

回答

3

答案完全取决于列表的大小。如果你有99999个单词,你不想要和1个单词,你应该做选择A.如果你有99999个单词你想要和1个单词你不应该,你应该做选项B.

背后的原因这是显而易见的 - 选项B中获得了更多和更高效的哈希集合较小的不想要的话是因为你必须检查整组任何时候,您使用选项B.

从纯理论的视图中插入一个新词,无论是在最坏情况下的时间复杂性方面是相同的,但实际上可能会有很大的差异。

因此,基本上,与大多数解决方案一样,效率取决于您希望如何构建数据。

+0

我更新了我的问题,让您更深入地了解我正在使用的数据。 – Nai

+0

@Nai我刚刚看到。所以就像我在我的回答中所说的那样,由于你不想要的单词比你所做的单词小得多,选项B绝对是最好的。 – nhouser9

+0

检查哈希集中的项目几乎是在同一时间,无论它有多大 –