查找一组数组的最大子集(内核)的算法

罗恩·泰勒(Ron Teller)

假设S是一组数组,我们想找到出现在中的每个数组中的值的最大子集S值可能会出现多次,如果一个值x在每个数组中至少出现一次,则它应该x在输出集中出现次数。

这个问题可以看作是找到的内核S

为了进行复杂度计算,假定S包含n数组,所有数组都为size m

例:

A = {4, 3, 8, 12, 5, 4, 4, 4}
B = {5, 4, 12, 1, 1, 4, 1, 1}
C = {2, 11, 4, 8, 4, 5, 2, 8}

Answer = {4, 4, 5} // order doesn't matter

一些注意事项:

  • 如果值在每个数组中都是唯一的,我们可以使用哈希表存储所有值,然后计算每个值的出现次数,如果它的出现次数等于中的数组数S,则它将输入答案。
  • 如果我们想要设置唯一值(即在示例中答案是{4, 5}),则可以对每个数组使用哈希表来检查是否已经将值添加到“大”哈希表中(从上一个项目符号开始),以防止重复插入数组中出现多次的值(或防止重复插入的任何其他措施)。

对执行此任务的有效(时间和内存)算法有何建议?

伯恩哈德·巴克

基于散列的方法

创建count第一个数组的值的哈希表

对于哈希表中的每个条目,还存储一个total,应将其设置为与计数相同。

对于每个下一个数组:

  • 重置哈希表中每个元素的计数。

  • 遍历数组,在哈希表中设置计数。

  • 为哈希表中的每个条目设置total = min(count, total)
    (用删除条目total = 0

复杂:

O(n)空间和(预期的)时间复杂度,其中n元素的总数。

基于排序的方法

对每个数组进行堆处理(到min-heap)(也可以与排序一起使用,但是这种解释有点令人困惑)。

  • max=每个堆的最小值中的最大值,并且maxIndex=该的索引。
  • maxIndex + 1换行开始循环遍历堆,直到用完所有值。
    • 如果我们回到maxIndex,这意味着所有值都相同,因此输出最后弹出的值。
    • 如果当前堆的最小值> max,集maxmaxIndex适当地
      (但不删除最小)。
    • 否则,从当前堆中删除最小值。

或(效率略低):

对所有数组进行排序。

  • 保留所有当前元素二进制搜索树(BST)(已初始化为包含每个数组的第一个元素)。
  • 反复从BST中删除最小值,然后从删除的元素所在的数组中添加下一个元素。
  • 每当BST的最大值和最小值相同时,所有节点都相等,因此我们输出该值。
  • 为了处理重复项,我们需要统计自上次输出值以来添加了多少个元素。仅在该计数大于或等于数组数时输出一个值。

复杂:

O(m)空间和O(m n log n)时间复杂度,其中m是数组数,n是每个数组中元素的平均数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

找到一组数字的最大子集,以使任意两个数字之和不能被给定数字整除

来自分类Dev

在一组数组中查找最小和最大时间

来自分类Dev

查找一组不重叠的子集

来自分类Dev

查找可重复以适合最大总值的一组值的算法

来自分类Dev

容量内数组元素的最大子集

来自分类Dev

查找最大子数组的分而治之算法-如何也提供结果子数组索引?

来自分类Dev

Clojure中的最大子数组算法

来自分类Dev

查找一组git项目何时被破坏的算法?

来自分类Dev

查找一组用户之间的相互关系的算法

来自分类Dev

最大子集总和

来自分类Dev

从一组数组中返回最大的数组

来自分类Dev

如何快速找到数组的最大子集而不是进行排序?

来自分类Dev

查找一组n个元素的k个独特元素子集的唯一组成

来自分类Dev

用于打印找到的最大子数组的元素的 Kadane 算法?

来自分类Dev

numpy,获取最大子集

来自分类Dev

打印一组的所有子集

来自分类Dev

查找总和为0的最大子数组的长度

来自分类Dev

查找一组数据的最大最大数目

来自分类Dev

根据一组对数组有效的元素将列表拆分为数组的算法

来自分类Dev

在列表中查找等于目标的一组数字的算法

来自分类Dev

查找最窄间隔的算法,其中m将覆盖一组数字

来自分类Dev

在Excel中一次查找一组单元格的最大数据

来自分类Dev

数组中的最大子集,使得最小和最大元素的间距小于K

来自分类Dev

如果以气泡排序交换的元素已连接,则查找所有未连接元素的最大子集

来自分类Dev

查找1的最大子串

来自分类Dev

Excel:使用什么公式返回一组查找值的最小值或最大值?

来自分类Dev

在一组列中查找最大值,并在相应行中检索值

来自分类Dev

熊猫上一组最小/最大

来自分类Dev

从上一组中选择最大

Related 相关文章

  1. 1

    找到一组数字的最大子集,以使任意两个数字之和不能被给定数字整除

  2. 2

    在一组数组中查找最小和最大时间

  3. 3

    查找一组不重叠的子集

  4. 4

    查找可重复以适合最大总值的一组值的算法

  5. 5

    容量内数组元素的最大子集

  6. 6

    查找最大子数组的分而治之算法-如何也提供结果子数组索引?

  7. 7

    Clojure中的最大子数组算法

  8. 8

    查找一组git项目何时被破坏的算法?

  9. 9

    查找一组用户之间的相互关系的算法

  10. 10

    最大子集总和

  11. 11

    从一组数组中返回最大的数组

  12. 12

    如何快速找到数组的最大子集而不是进行排序?

  13. 13

    查找一组n个元素的k个独特元素子集的唯一组成

  14. 14

    用于打印找到的最大子数组的元素的 Kadane 算法?

  15. 15

    numpy,获取最大子集

  16. 16

    打印一组的所有子集

  17. 17

    查找总和为0的最大子数组的长度

  18. 18

    查找一组数据的最大最大数目

  19. 19

    根据一组对数组有效的元素将列表拆分为数组的算法

  20. 20

    在列表中查找等于目标的一组数字的算法

  21. 21

    查找最窄间隔的算法,其中m将覆盖一组数字

  22. 22

    在Excel中一次查找一组单元格的最大数据

  23. 23

    数组中的最大子集,使得最小和最大元素的间距小于K

  24. 24

    如果以气泡排序交换的元素已连接,则查找所有未连接元素的最大子集

  25. 25

    查找1的最大子串

  26. 26

    Excel:使用什么公式返回一组查找值的最小值或最大值?

  27. 27

    在一组列中查找最大值,并在相应行中检索值

  28. 28

    熊猫上一组最小/最大

  29. 29

    从上一组中选择最大

热门标签

归档