【问题标题】:Efficient algorithm to calculate the mode of a hidden array计算隐藏数组众数的高效算法
【发布时间】:2020-04-06 17:09:08
【问题描述】:

我正在尝试解决我在问题中描述的问题的扩展:Efficient divide-and-conquer algorithm
对于此扩展,已知活动中有 3 方的代表,其中 1 方参加的成员比其他任何一方都多。可以在下面找到问题的正式描述。

给你一个整数 n。有一个大小为 n 的隐藏数组 A,其中包含可以取 3 个值中的 1 个的元素。有一个值,假设为 m,它在数组中出现的频率比其他 2 个值高。
允许查询形式为 Introduction(i, j),其中 i≠j,且 1 输出:B ⊆ [1, 2. ... n] 其中 B 中每个元素的 A 值为 m。

对此的强力解决方案可以通过在 n(n-1) 个元素组合上调用引入(i, j) 来计算 O(n2) 中的 B,并创建 3 个包含 A 的列表- 在对它们调用引入时返回 1 的元素的索引,返回最大大小的列表。
我了解Boyer–Moore majority vote algorithm,但找不到针对此问题修改它的方法或找到解决此问题的有效算法。

【问题讨论】:

    标签: algorithm complexity-theory


    【解决方案1】:

    扫描所有 A[i] = A[0],并列出所有 i 的列表 I[],其中 A[i] != A[0]。然后扫描所有 A[I[j]] = A[I[0]],依此类推。这需要对 A[] 中的每个可能值进行一次 O(n) 扫描。

    [我假设如果 introduce(i, j) = 1 并且 introduce(j, k) = 1,那么 introduce(i, k) = 1 -- 所以你不需要检查所有元素的组合。]

    当然,这并没有告诉你'm'是什么,它只是制作n个列表,其中n是值的个数,每个列表是A[i] 相同的所有“i”。

    【讨论】:

      猜你喜欢
      • 2021-01-17
      • 1970-01-01
      • 2012-12-05
      • 2013-11-24
      • 2010-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多