如何将列表与其频率进行比较

问题描述 投票:0回答:1

我有兴趣寻找两个列表之间的相似之处。我在第一列中有重复项的计数,而模式在第二列中。比较这两个列表的最合乎逻辑的方法是什么,这样我就不需要手动进行比较?

List1 is:
11 | 55
4  | 31
4  | 1
3  | 22
2  | 13
1  | 81```

List2 is:
7  | 31
6  | 22
6  | 13
4  | 88
3  | 14
1  | 55
math design-patterns logic frequency similarity
1个回答
0
投票

首先,这些可以更好地存储,当您在这些列表中搜索值时,当前的时间复杂度为 O(n)。数据可以更好地以模式的 Bag(一组允许重复的集合)或以模式为键的字典的形式存储。 这些很可能使用二叉树或哈希表来实现,从而导致 O(log n) 或 O(1) 搜索。

您将需要迭代存储在两个包中的模式,实现此目的的一种与语言无关的方法是形成两个包中所有模式的集合(这样您就不会得到重复项)。然而,对于许多语言,您可以通过编写了解这两个包的自定义迭代器或生成器来设法避免存储新集合。

在解释比较结果时,这将根据您想要的输出的详细程度而有所不同,您是否只想知道是否有任何差异,或者总差异的计数,或者知道哪些模式不同,或者按模式划分的总差异,您是否需要知道哪个列表中的每种模式较多/较少?

假设您只想要算法的总差异:

  • 循环所有模式
  • 查询 2 袋行李的数量
  • 找出 2 个计数的差异
  • 将绝对差值添加到运行总计中
© www.soinside.com 2019 - 2024. All rights reserved.