范围交集/并集

2024-03-01

我正在开发一种编程语言,我想为其提供Range数据类型,目前不像通常那样是一个成对的列表int values (x,y)的约束条件是x < y。我说不像通常那样,因为通常范围只是一对,但在我的情况下,它超过,例如允许

1 to 5, 7 to 11, 13 to 22

全部包含在一个对象中。

我想提供两个函数来生成两个范围的并集和交集,它们应该包含几个范围中最少数量的非重叠间隔..例如

1 to 5 || 3 to 8 = 1 to 8
1 to 5 && 3 to 8 = 3 to 5
(1 to 3, 4 to 8) && 2 to 6 = (2 to 3, 4 to 6)

where ||是并集并且&&是交集。

现在,如前所述,它们的实现只是一个列表。我知道存在更合适的数据结构(区间树),但现在我更关心从其他列表的并集/交集构建新列表。

实现这两个功能的最先进算法是什么?

提前致谢


由于您不想处理区间树而仅使用列表,因此我建议您将范围表示保留为按 x 坐标排序的不相交区间列表。

给定两个列表,您可以通过执行某种合并步骤来计算并集和交集,就像我们在合并排序列表中所做的那样。

Example:

对于 L1 和 L2 的并集:

创建 L 为空列表。

从 L1 和 L2 中取出 x 最小的区间,放到 L 上。

现在再次取最小的,与 L 的最后一个元素进行比较,并决定是否需要合并它们(如果重叠)或在 L 的末尾附加新的间隔(如果它们不重叠)并继续处理,就像我们在合并两个排序列表。

完成后,L 将是其间隔按 x 排序且不相交的并集。

对于交叉点,你可以做类似的事情。

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

范围交集/并集 的相关文章

  • Python,Bokeh:如何更改日期时间轴的范围

    我想使用按钮设置日期时间轴的范围 然而 该命令 f x range Range1d start start date end end date 不起作用 单击按钮时没有任何反应 无论是在运行 Bokeh 服务器的终端窗口中 还是在 Chro
  • Codility 钉板

    尝试了解 Codility NailingPlanks 的解决方案 问题链接 https app codility com programmers lessons 14 binary search algorithm nailing pla
  • 确定解决迷宫问题的最小线段数

    我有一个问题 我需要定义一个具有最少数量的顶点的多边形 该多边形与不透明的图像中的每个像素相交或包含每个像素 令 N 为图像中的像素数 我唯一的假设是图像的边界 孔 内不能包含透明像素 并且至少有两个像素是不透明的 举个例子 假设我有以下图
  • 删除队列中的最后一个元素

    我需要删除队列的最后一个元素 我唯一可以使用的操作是 Peek 获取第一个元素而不删除它 Enqueue element 向队列末尾插入一个元素 Dequeue 删除第一个元素 IsEmpty true 或 false 队列是否为空 而且我
  • 如何将无向图转换为 DAG?

    The 维基页面 http en wikipedia org wiki Directed acyclic graph Relation to other kinds of graphs says 任何无向图都可以通过为其顶点选择总顺序并将每
  • 高维最近邻搜索的最佳数据结构

    我实际上正在处理高维数据 50 000 100 000 个特征 并且必须对其执行最近邻搜索 我知道随着维度的增长 KD 树的性能很差 而且我还了解到 一般来说 所有空间分区数据结构都倾向于对高维数据执行详尽的搜索 此外 还有两个重要事实需要
  • Typescript:理解并集和交集类型

    我试图在打字稿中获得关于并集和交集类型的直觉 但我无法弄清楚这种情况 interface A a number interface B b boolean type UnionCombinedType A B type Intersecti
  • 确定一个范围是否完全被一组范​​围覆盖

    如何检查范围是否为完全覆盖由一组范围 在以下示例中 WITH ranges id a b AS SELECT 1 0 40 UNION SELECT 2 40 60 UNION SELECT 3 80 100 UNION SELECT 4
  • Python range() 和 zip() 对象类型

    我了解功能如何range and zip 可以在 for 循环中使用 然而我期望range 输出一个列表 很像seq在 Unix shell 中 如果我运行以下代码 a range 10 print a 输出是range 10 表明它不是一
  • mysql 在 sum() 函数上使用 concat,例如 concat(sum(col1),"%")

    我正在尝试合并多个查询 但其中一个查询使用 sum 当我尝试在此列上应用 concat 时 我得到不需要的 blob 结果 我如何在聚合列上应用 concat 和 union 我期待这个结果 SELECT row 1 col1 UNION
  • 在 C++ 中通过引用传递 std 算法谓词

    我正在尝试从 a 中删除元素std list并保留已删除元素的一些统计信息 为此 我使用列表中的remove if 函数 并且我有一个谓词 我想使用这个谓词来收集统计数据 这是谓词的代码 class TestPredicate privat
  • Karasuba算法递归过多

    我正在尝试用 c 实现 Karasuba 乘法算法 但现在我只是想让它在 python 中工作 这是我的代码 def mult x y b m if max x y lt b return x y bm pow b m x0 x bm x1
  • 将字符串中的“奇怪”字符转换为罗马字符

    我需要能够将用户输入仅转换为 a z 罗马字符 不区分大小写 所以 我感兴趣的角色只有26个 然而 用户可以输入他们想要的任何 形式 的字符 西班牙语 n 法语 e 和德语 u 都可以包含用户输入中的重音符号 这些重音符号会被程序删除 我已
  • 关于在字典中查找所有有效单词的算法问题

    给定一个字典 只是一个字符串列表 您收到来自外部来源的未知数量的信件 给定字母串 您将如何列出您可以通过这些字母的任意组合组成的所有有效单词 来自字典 因此 如果您收到 applead 你应该找到apple bad pad lead等 我知
  • C 埃及分数

    古埃及人仅使用以下形式的分数1 n因此任何其他分数都必须表示为这些单位分数的总和 而且 所有单位分数都是不同的 在C或Java中使任何分数成为埃及分数 总和越少越好 的好方法是什么 可以使用什么算法 分支定界 a 例如 3 4 1 2 1
  • 数学组合的完美最小哈希

    首先定义两个整数N and K where N gt K 两者都在编译时已知 例如 N 8 and K 3 接下来 定义一组整数 0 N or 1 N 如果这使答案更简单 并调用它S 例如 0 1 2 3 4 5 6 7 的子集数量S wi
  • 绘制多边形

    我正在使用 Google Maps API V3 根据路径绘制多边形 该路径是随机未排序坐标点 LatLng 的数组 这会产生以下形状 Polylines intersect Problem 由于多边形的形状取决于路径中点的顺序 因此如何对
  • 具有 2 个属性的背包算法。如何在 3d 数组中实现它?

    当有超过 1 个属性时 我无法理解背包问题 当有 1 个属性时 我必须编写一个使用具有 2 个属性的背包算法的程序 老师告诉我们 它必须在 3d 数组中完成 错误的实现将导致 O 2 n 处理时间 我无法想象这样的数组会是什么样子 假设这是
  • 大数据使用什么数据结构

    我有一个包含一百万行的 Excel 工作表 每行有 100 列 每行代表一个具有 100 个属性的类的实例 列值是这些属性的值 哪种数据结构最适合在这里使用来存储数百万个数据实例 Thanks 这实际上取决于您需要如何访问这些数据以及您想要
  • 在 O(n) 时间内排序?

    我被这个问题困扰了 2周 知道如何处理它吗 令 L 为 n 个不同整数的列表 假设 L 的 x 的元素在 1 750 范围内 设计线性排序算法对 L 的元素进行排序 我已经尝试过插入排序 但我不确定我的方法是否正确 Construct an

随机推荐

  • lambda 和成员函数指针的区别

    在我的回答中here https stackoverflow com a 74078452 11998382 巴里指出最好打电话views transform Planter getPlants 因为views transform Plan
  • 派生 Serde 的 Serialize 或 Deserialize 强制泛型类型可序列化,尽管它不需要

    My type A 它可以包含任何实现trait Trait 是可序列化的 尽管实现该特征的类型Trait也许不是 就我而言 它不可能 它是一个私有非对称密钥 extern crate serde macro use extern crat
  • 梯度下降和牛顿梯度下降有什么区别?

    我明白梯度下降的作用 基本上 它试图通过缓慢地沿着曲线移动来走向局部最优解 我想了解普通梯度下降法和牛顿法之间的实际区别是什么 我从维基百科上读到了这样一句话 牛顿方法使用曲率信息来采取更直接的路线 这直观上意味着什么 在局部最小值 或最大
  • 如何在 Java 中将 long 变量更改为时间戳?

    如何将长整型变量更改为时间戳变量 我可以将其转换为字符串 但我需要将其转换为时间戳才能在数据库中使用它 Timestamp 扩展了 java util Date 并且它有一个接受 long 的构造函数 像这样 import java sql
  • 如何在android中注册低电量广播接收器?

    我想注册低电量广播 如果电池状态达到某种程度 我想收到警报 如果您有任何想法请帮助我 您需要注册一个BroadcastReceiver for ACTION BATTERY LOW http developer android com re
  • Mathematica:未评估、延迟、保留、HoldForm、HoldAllComplete、等等

    我对所有旨在以某种方式阻止评估的内置 Mathematica 函数感到困惑 Unevaluated Defer Hold 以及超过六种形式Hold Mathematica 文档只是单独解释每个函数 而没有解释为什么选择其中一个函数 谁能对所
  • 在 ECMA 第 3 阶段使用提案在统计上是否安全?

    背景 我指的是 操作员 许多人喜欢并支持执行以下操作的想法 const obj hello 1 const obj2 world 2 obj Problem 与典型的语法相比 我个人更喜欢这种语法Object assign但最近当我开始在我
  • 如何使用 jQuery .ajax 来执行我的表单操作

    我改变了 php 和 jQuery 的编码风格 但是我的注册 reg form company bind submit function fancybox showActivity ajax type POST cache false ur
  • jQuery:调用后更改插件选项

    我自己制作了一个插件 用于在使用 jquery ui 对话框时设置一些东西 而不是调用 popup dialog options 我用这个 popup dialogPlugin options 并且dialogPlugin会调用 dialo
  • 将存储过程输入参数分配给局部变量是否有助于优化查询?

    我有一个需要 5 个输入参数的存储过程 该过程有点复杂 大约需要 2 分钟才能执行 我正在优化查询 所以 我的问题是 将输入参数分配给局部变量然后在过程中使用局部变量是否总是有帮助 如果是这样 它有什么帮助 我不会尝试解释参数嗅探的完整细节
  • 在 Go 中实现 Merkle 树数据结构

    我目前正在尝试在 Go 中实现默克尔树数据结构 基本上 我的最终目标是存储一小组结构化数据 最大 10MB 并允许该 数据库 轻松与分布在网络上的其他节点同步 请参阅相关资料 我已经在 Node 中相当有效地实现了这一点 因为没有类型检查
  • 访问 iPhone 地址簿中的人员信息

    我需要让用户有机会从地址簿中选择电话号码 所以我以苹果手册为例 但它只需要第一个号码 我如何让用户可以选择地址簿中的一个号码 IBAction adressBook UIButton sender ABPeoplePickerNavigat
  • 如何防止 CSS 渲染阻止我的网站?

    我正在尝试优化移动网页的加载速度 为此我正在使用该网站 https developers google com speed pagespeed insights https developers google com speed pages
  • 递归替换字典中的字符

    如何更改所有点 下划线 在字典的键中 给定一个任意嵌套的字典 我尝试的是编写两个循环 但随后我将仅限于两级嵌套字典 This brown muffins 5 green pear 4 delicious apples green apple
  • MySQL 可以检查该文件是否存在吗?

    我有一个表 其中保存硬盘上真实文件的相对路径 例如 SELECT FROM images gt id path 1 files 1 jpg 2 files 2 jpg 我可以创建一个查询来选择指向不存在文件的所有记录吗 我需要通过 MySq
  • 如何在 angular2/ionic 2 typescript 应用程序中使用 Numeral.js 库?

    我已经成功地在我的 angularJs 1 x 应用程序中使用 Numeral js 库以不同的格式格式化我的数字 这就是我使用 angular1 过滤器的方式 过滤器 js filter numeral function return f
  • MPI 运行错误“导致所有级别集体中止”

    我正在尝试使用 C 中的 MPI 编写并行程序 但是 当我运行我的程序时 我收到该消息并且我的程序被终止 我不知道该错误消息的原因 警告 无法读取 mpd hosts 或未提供主机列表 MPI 作业将仅在当前计算机上运行 解决方案正在启动
  • 配置文件标记为重复的 Exceptionless 包

    不确定我的项目发生了什么 但是当我尝试运行它时 我收到了错误消息Could not load file or assembly Exceptionless Mvc or one of its dependencies Eceptionles
  • Git:如何分析具有多文件历史记录的代码?

    我即将在现有项目中移动大量文件 在执行此操作之前 我想牢牢掌握一些用于分析具有多文件历史记录的代码的技术 如何使用git来询问 这行代码是从哪里来的 当内容在其生命周期内移动过多个文件时 我知道 git 不会明确地跟踪重命名 有充分的理由
  • 范围交集/并集

    我正在开发一种编程语言 我想为其提供Range数据类型 目前不像通常那样是一个成对的列表int values x y 的约束条件是x lt y 我说不像通常那样 因为通常范围只是一对 但在我的情况下 它超过 例如允许 1 to 5 7 to