找到一对没有交集的对

2024-01-01

Given a set of n pairs of integers, is there a fast way to determine if there exists two pairs (x1, y1) and (x2, y2) so that the intersection of the sets {x1, y1} and {x2, x2} is empty?

例如,{(0,1), (0,2), (2,1), (3,2)} 的答案为 {(0,1), (3,2)}。然而{(0,1),(0,2),(2,1)}没有这样的对。

在 Python 中,您可以按如下方式尝试所有对。

l = [(0,1), (0,2), (2,1), (3,2)]
print  [pairs for pairs in itertools.combinations(l, 2)
    if not (set(pairs[0]) & set(pairs[1]))]

This approach takes O(n2) time. Can you get something closer to linear time?


以下算法应该在 O(n) 时间内运行。它基于以下观察:如果你有一对 {a, b},那么每隔一对

  1. 不包括 a 或 b,或者
  2. 至少包括 a 或 b 之一。

如果您选择任何集合 {a, b} 并将每个其他集合分类为这五个类别之一,请注意,如果您在情况 1 中得到任何内容,那么您就完成了并且您知道存在这样一个对。因此,唯一有趣的情况是当所有其他集合都属于情况 2 时。当这种情况发生时,我们可以将这两个组称为“A”组和“B”组(对于匹配 a 的集合和与 b 匹配的集合)。

一旦你有了A组和B组,你就知道没有两个A集合可以成为你想要的对,没有两个B集合可以成为你想要的对,并且集合{a,b}不能成为其中的一部分你想要的那对。唯一的选择是,您可以将 A 组中的某些内容与 B 组中的某些内容配对。仅当 A 组中的某些非 A 组件与 B 组中的任何非 B 组件不匹配时,才会发生这种情况。您可以在 O(n) 中检查这一点,方法是构建一个包含 A 组的非 A 组件的哈希表,然后检查 B 组的每个元素其非 B 组件是否在哈希集中。

总而言之,该算法是

  • 选择一对 {a, b}。
  • For each other pair {c, d}:
    • 如果 {a, b} 和 {c, d} 不相交,则完成。
    • 否则,如果 {a, b} = {c, d},则丢弃 {c, d}。
    • 否则,如果包含 a,则将 {c, d} 放入 A 组;如果包含 b,则将其放入 B 组。
  • 如果 A 组或 B 组中有一个为空,则不存在对。返回假。
  • 对于 A 组的每个元素,将该对的非元素添加到哈希集中。
  • 如果 B 组的任何元素具有不在哈希集中的非 b 分量,则返回 true,否则返回 false。

其运行时间为 O(n) 并使用 O(n) 额外内存。

希望这可以帮助!

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

找到一对没有交集的对 的相关文章

随机推荐

  • cmake:为 Mac OS X 应用程序设置图标

    使用cmake环境安装Mac OS X应用程序 我想设置并安装图标 在安装过程中 因此 我尝试设置 set MACOSX BUNDLE ICON FILE CMAKE CURRENT SOURCE DIR images myAopImage
  • docker-machine boot2docker root 密码

    在任何地方都没有找到答案 我使用 docker machine 创建了一个虚拟机 boot2docker 我需要使用 root 编辑一些文件 boot2docker中的root密码是什么 如果您只有一台 docker 机器 您只需执行以下操
  • 在AWS lambda函数中从s3存储桶读取.mdb或.accdb文件并使用python将其转换为excel或csv

    我有一个用例 我需要从放置在 AWS s3 存储桶上的 MS Access 文件 mdb 或 accdb 读取表 并在 AWS lambda 函数中将其转换为 csv 或 excel 文件 然后再次将转换后的文件上传到 s3 存储桶 我通过
  • HTML5 contenteditable 属性在 iOS7 Mobile Safari 上无法正常工作

    看来 contenteditable 属性 在 iOS6 上运行良好 在 iOS7 webkit 上已停止运行 尽管浏览器似乎识别该字段可编辑 并调出键盘 但任何输入似乎都会关闭它 或者无法注册 大家有没有遇到同样的问题 或者有什么解决办法
  • 如何构造每个轴具有不同半径的半圆形状?

    对于我的另一个问题如何构建具有单独圆角边缘的长方体 https stackoverflow com q 72537595 143684 每个边缘的边缘半径不同 我想尝试使用类似球形的形状放入所有 8 个角并在它们上面应用外壳 为此 我需要一
  • MooTools 类的静态方法和变量的最佳实践

    是否有任何最佳实践或常见解决方案来向 MooTools 生成的类添加对 静态 方法和变量的支持 特别是 是否有任何解决方案可以确保在实例之前进行静态初始化initialize方法被调用 警告 从未使用过 MooTools 不过 我已经使用过
  • CSS 行高指南

    我记得读过一份风格指南 解释了每个元素的正确行高应该是多少 我在谷歌上找不到它 如果有人可以将我链接到这样的指南 或者在答案中进行解释 我将不胜感激 Thanks 编辑 抱歉 请让我澄清一下 我不是问如何使用 CSS 设置行高 而是问各种元
  • 如何将文本区域滚动条默认设置为底部?

    我有一个文本区域 当用户输入被发送时 它会动态地重新加载 它每隔几秒钟刷新一次 当此文本区域中的文本量超过文本区域的大小时 会出现滚动条 但是 滚动条实际上 并不可用 因为如果您开始向下滚动 几秒钟后文本区域会刷新并将滚动条带回到顶部 我想
  • macOS WKWebView 背景透明度

    如果有人有经验WKWebView 请分享如何使视图背景透明 这WebView对象有这样的选项var drawsBackground Bool get set 但它缺少WKWebView班级 我在网上搜索并 什么也没找到 以前可以通过以下方式
  • iframe 中的 Google 跟踪代码管理器数据层

    我想知道是否可以在 iframe 与其父页面之间 同步 数据层 情况 我有一个带有 GTM 容器和硬编码数据层的父页面 在该父页面中 我有一个具有相同 GTM 容器的 iframe 我想要做的是从 iframe 读取父级中的 dataLay
  • Rails 4 跨子域会话

    我正在尝试以下方法 但没有成功尝试跨子域保留会话 MyApp Application config session store cookie store key myapp session domain gt all tld length
  • Django 1.6 中的静态文件

    我可能在这里做错了很多事情 因为尽管严格遵循了教程 但我仍然无法让静态文件在我的开发环境中正常工作 我有一种感觉 因为它在 Django 1 6 中的工作方式略有不同 而且我只能找到以前版本的答案 这是我的目录结构 mysite app1
  • Xcode 12.5:SPM 依赖项缓存位置

    Swift 包管理器有了新的Xcode 12 5 中的功能 https developer apple com documentation xcode release notes xcode 12 5 beta release notes
  • BigQuery:如何通过窗口函数合并 HLL 草图? (在滚动窗口上计算不同值)

    相关表架构示例 activity date TIMESTAMP user id STRING 2017 02 22 17 36 08 UTC fake id i24385787 2017 02 22 04 27 08 UTC fake id
  • 将元组有效地处理为固定大小的向量

    在 Chapel 中 同构元组可以像小的 向量 一样使用 例如 a b c 3 0 5 0 但是 由于没有为元组提供各种数学函数 因此我尝试编写一个函数norm 并通过多种方式比较了它们的性能 我的代码是这样的 proc norm 3tup
  • MYSQL使用范围/限制对数据的所有行和分页进行计数

    我不知道这是否是重复的 但这是我的问题 我试图实现从数据库中获取的数据的分页 我的困境是 我应该进行分页 分组查询数据吗 5 使用限制 范围进行选择 然后将它们显示在带分页的表格中 它将有页码 因此需要计算所有表条目 因此初始显示将需要 2
  • WordPress 本地主机不工作[重复]

    这个问题在这里已经有答案了 我是 WordPress 新手 所以请帮忙 我知道已经存在一些与此相关的问题 但它不起作用 因此寻求帮助 我已经克隆了一个实时存储库并将其保存在我的 WAMP www 文件夹中 该文件夹通常用于其他 php 站点
  • 将 Numpy 数组重塑为形状为 (n, n, n) 的立方体的字典顺序列表

    为了理解我想要实现的目标 让我们想象一个 ndarraya有形状 8 8 8 我从中按字典顺序选取形状块 4 4 4 因此 在迭代这些块时 索引将如下所示 0 a 0 4 0 4 0 4 1 a 0 4 0 4 4 8 2 a 0 4 4
  • 如何反序列化大 JSON 文件 (~300Mb)

    我想解析一个JSON文件 大小 300Mb 我用Jackson图书馆和ObjectMapper 如果我出现记忆问题 这正常吗 第一次 我使用BufferedReader 它会使应用程序崩溃 接下来 我使用这个库 解析并保存到SQLite数据
  • 找到一对没有交集的对

    Given a set of n pairs of integers is there a fast way to determine if there exists two pairs x1 y1 and x2 y2 so that th