最少的检查来查找列表中的重复项

2024-01-25

给定一个序列 (d1, d2, ..., dn),我想计算所有 i != j 的乘积 (1 - Dij),其中如果 di = dj,则 Dij = 1,否则为 0。

我的代码仅在我时检查 Dij

prod = 1;
for (int i=1; i<n; ++i) {
    for (int j=i; j<=n; ++j) {
        prod *= (1 - Dij);
    }
}

我知道当我得到 Dij=1 时我可以停下来,但我想做的是获取要检查的 Dij 的最小表达式。这样我就有了一个表达式,然后我可以使用差异序列并对其进行评估。所以我知道我能做到i<j代替i != j。所以我想扩展这个产品并得到 n=3 的类似结果:

(1 - D12) (1 - D13) (1 - D23) = 1 - D12 - D13 - D23 + D12*D13 + D12*D23 + D13*D23 - D12*D13*D23

但我能做的还有更多。这个表达式实际上总是等于

1 - D12 - D13 - D23 + 3 * D12*D13 - D12*D13*D23

我的问题是:

  1. 为什么D12 * D13 = D12 * D23?这总是正确的(意味着 d 序列是什么并不重要),但我真的不明白为什么,因为在我看来,这意味着 D13 = D23 这并不总是正确的(它取决于 d 序列) 。这种关系有助于使表达式更小。

  2. 我怎样才能找到所有这样的关系并得到一个最小表达式?上面的表达式是最小的吗?我什至不知道。


您正在尝试确定 D 是否包含任何重复项。最终,这需要您将每个条目相互比较,这只是枚举两个元​​素的所有唯一组合。最终结果是N*(N-1)/2。您可以通过先对 D 进行排序,然后搜索重复的相邻对(O(N*log(N)),或者,假设您坚持整数的有限范围,您可以使用位向量将其减少到线性时间,或者如果您喜欢冒险,则可以使用基数排序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最少的检查来查找列表中的重复项 的相关文章

  • 在 Perl 中确定范围重叠的最快方法

    我有两组范围 每个范围都是一对整数 开始和结束 表示单个较大范围的某些子范围 两组范围的结构与此类似 当然 将替换为实际数字 a ranges a 1 gt start gt end gt a 2 gt start gt end gt a
  • 算法挑战:从图像生成配色方案

    背景 因此 我正在开发一个网络应用程序的新版本 而且 我们发现我们的用户非常懒惰 实在是太懒了 事实上 我们为他们做的工作越多 他们就越喜欢这项服务 现有应用程序的一部分要求用户选择要使用的配色方案 但是 我们有一张图片 用户网站的截图 为
  • 给定一个数字 0-9 的数组和一个整数 n,找到可由输入数组组成且小于 n 的所有整数

    问题是这样的 给你一个数字 0 9 的数组和一个整数n 该数组可能包含任何给定数字的重复项 找到所有可以通过连接输入数组中的数字形成的整数并且小于n 输入数组中的数字可以在输出的元素中重复 例如 输入为 2 5 8 且 n 223 则输出应
  • 找到经过大多数点的直线的最有效算法是什么?

    问题 N 个点在二维平面上给出 同一个点上最多有多少个点straight line The problem has O N2 solution go through each point and find the number of poi
  • 是否有任何算法可以计算给定定义形状的坐标的形状面积?

    所以我有一些接收 N 个随机数的函数2D点 是否有任何算法可以计算输入点定义的形状面积 你想要计算多边形的面积 http local wasp uwa edu au pbourke geometry polyarea 取自链接 转换为 C
  • 数独生成器算法[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我制作了一个生成数独的算法 但效率非常低 每个谜题都需要几分钟才能生成 所以现在我正在尝试以最佳方式重新编写它 但我遇到了一些问题 需
  • 有向无环图的拓扑排序为阶段

    是否有一种算法 给定一个未加权的有向无环图 将所有节点排序到节点集列表中 使得 拓扑顺序被保留 即 对于所有边u gt v v出现在列表中更靠下的集合中u and 列表的长度是最小的 这个问题有名字吗 Example 下图的一种可能的排序是
  • 如何在编程中表示sqrt(-1)?

    我想代表sqrt 1 在C 中 因为我正在尝试实现FFT算法 有没有好的方法来表示这一点 我猜你正在寻找 include
  • 飞船推进AI:控制飞船在x=0、v=0时着陆的力

    我必须编写 AI 代码来控制游戏中宇宙飞船的许多推进喷气机 为简单起见 令空间为一维 宇宙飞船是一个点 只有 1 架喷气机 规则与问题 Let x v and a是飞船的位置 速度 加速度 Let F是施加在船上的喷射力 我知道质量m宇宙飞
  • 动态前缀和

    是否有任何数据结构能够返回数组的前缀和 1 更新元素以及向数组插入 删除元素 所有这些都在 O log n 内 1 前缀和 是从第一个元素到给定索引的所有元素的总和 例如 给定非负整数数组8 1 10 7前三个元素的前缀和是19 8 1 1
  • 当尝试在随机数字数组中查找运行最大值时,会调用多少次更新最大值?

    假设我们有一个包含 N 到 N 的整数的数组 数组大小为 2N 1 我们首先对数组中的元素进行混洗 然后尝试通过从第一个元素到最后一个元素迭代数组来找到最大整数 代码示例是Java语言 int called 0 int max Intege
  • 求从1到N的所有数字的数字之和[重复]

    这个问题在这里已经有答案了 问题 求1到N 包括两端 所有数字的数字之和 时间复杂度应该是 O logN 对于 N 10 总和为 1 2 3 4 5 6 7 8 9 1 0 46 对于 N 11 总和为 1 2 3 4 5 6 7 8 9
  • 限制纬度和经度值的模数

    我有代表纬度和经度的双精度数 我可以轻松地将经度限制为 180 0 180 0 具有以下功能 double limitLon double lon return fmod lon 180 0 360 0 180 0 这是有效的 因为一端是排
  • 在大文件中查找重复字符串

    一个文件包含大量 例如100亿 字符串 您需要查找重复的字符串 您有 N 个可用系统 您将如何找到重复项 埃里克森的答案可能是提出这个问题的人所期望的 您可以将 N 台机器中的每台机器用作哈希表中的一个存储桶 对于每个字符串 按顺序说出字符
  • 快速算法可以快速找到一组范围中某个数字所属的范围?

    场景 我有几个数字范围 这些范围不重叠 由于它们不重叠 逻辑结果是任何时候任何数字都不能属于多个范围 每个范围都是连续的 单个范围内没有空洞 因此范围 8 到 16 将真正包含 8 到 16 之间的所有数字 但两个范围之间可能存在空洞 例如
  • 检查列表是否已排序的 Pythonic 方法

    有没有一种Python式的方法来检查列表是否已经排序ASC or DESC listtimestamps 1 2 3 5 6 7 就像是isttimestamps isSorted 返回True or False 我想输入一些消息的时间戳列
  • 如何判断一组大小为 N 的 3 个数字之和是否恰好等于 M

    我想知道如何实现比 O N 3 更好的解决方案 它类似于背包和子集问题 在我的问题 N 您可以从一些通用技巧中受益 以提高算法的性能 1 不要存储只使用一次的东西 存储超出实际需要的内容是一个常见的错误 每当你的记忆力要求似乎爆炸时 要问自
  • 有没有办法根据值是大于 0.5 还是小于 0.5 来进行下限/上限?

    我正在尝试舍入我的价值观 以便如果它是0 5或更大 则变为1 否则就变成0 例如 3 7 gt 4 1 3 gt 1 2 5 gt 3 有任何想法吗 Math Round 3 7 MidpointRounding AwayFromZero
  • 将数字公平分配到两组的算法

    给定一组 n 个数字 1 每组的总数最多相差 1 A 中所有数字的总和尽可能接近 B 中所有数字的总和 即分布应该是公平的 有人可以建议一种有效的算法来解决上述问题吗 谢谢 由于数字很小 因此它不是 NP 完全的 为了解决这个问题 你可以使
  • 最小对的总和

    Given 2N点 in a 2D plane 你必须将它们分组为N pairs使得所有对的点之间的距离的总和是最小可能值 所需的输出只是总和 换句话说 如果a1 a2 an分别是第一对 第二对 和第 n 对点之间的距离 则 a1 a2 a

随机推荐