区间交叠(学习笔记)

  前提---所用到的重要数据结构:最优查找树。 

  问题描述:  已知区间集合的区间查询,设已知区间的集合D和—个查询区间 I , 要求列举出D中所有与 I 相交叠的区间。

 算法思想:

    利用优先查找树作已知区间集合D的区间查询,是令D中每个区间[a,b]对应于平面上的一个点(b,a),因为 a < b, 故所有的点都在下半个第一象限(45度斜线以下)。

     若给定的查询区间为:I=[x,y]。则凡与I交叠的区间I应满足: a <= y, b>=x ,故平面上相应的点应在域[x,∞]×[0,y]之内.如下图所示(a)的例子中,对应平面上点集的查询问题如图(b)所示。

    因查询区间 I=[4,6],借助于优先查找树可确定在平面上域[x,∞]×[0,y]中的点为I2,I4和I5。 这说明D中的I2,I4,I5这3个区间与I相交叠。次查询过程时间复杂性为O(log(n) + k),其中k为列举出的区间数。

来源:《现代工程学与应用》

引用中提到了贪心算法,该算法在解决问题时,总是做出在当前看来是最好的选择,而不是从整体最优上加以考虑,仅在某种意义上的局部最优。在引用中给出了一个使用贪心算法解决区间交叠问题的JS代码示例。该代码读取输入的区间范围,并按照特定的排序规则对区间进行排序。然后使用一个栈来存储最优的区间,遍历所有的区间并进行比较,根据不同的情况来更新栈中的区间。最后,输出栈的长度表示交叠区间数量。通过这种贪心算法的思路,可以有效地解决区间交叠的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [JS基于贪心算法解决背包问题示例](https://download.youkuaiyun.com/download/weixin_38627213/13194957)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [华为机试真题 Python 实现【区间交叠问题】【2022.11 Q4新题】](https://blog.youkuaiyun.com/misayaaaaa/article/details/128221414)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值