gpt4 book ai didi

Java:快速计算多个集合之间共享的项目数

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:52:04 24 4
gpt4 key购买 nike

我有 10 个输入集,每个集包含数百个项目(字符串)。

我想要什么:

我想找到至少由两个集合共享的项目,并按在不同集合中出现的次数降序对它们进行排序。

我的方法:

我创建了以下代码。但是,我想知道,是否存在更有效的方法...

Map<String, Integer> sharedCounts = new HashMap<>();

for (int i = 0; i < 10; i++) {
Set<String> words = getWords(i);
for (String word : words) {
if (sharedCounts.containsKey(word)) {
sharedCounts.put(word, commons.get(word) + 1);
} else {
sharedCounts.put(word, 1);
}
}
}

Map<String, Integer> sorted = sharedCounts.entrySet().stream()
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

最佳答案

您计算计数的算法具有 O(SUM(Ni)) 的渐近复杂度,其中 Ni 是第 i 组单词的大小。这是最快的速度。

您似乎缺少一个过滤步骤,您在该步骤中丢弃了计数为 1 的单词。

Map<String, Integer> sorted = commons.entrySet().stream()
.filter(e -> e.getValue() > 1) // <<== Add this line
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

整体复杂度为 O(SUM(Ni)+Ndistinct-dup*log(Ndistinct-dup)),其中 Ndistinct-dup 是具有重复的不同单词的数量。

关于Java:快速计算多个集合之间共享的项目数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40470036/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com