You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

整数-区间关联中的最大配对匹配及高效算法可行性探讨

整数与区间的最大配对数高效算法探讨

问题定义

给定两个集合:

  • 包含n个无序、可重复整数的集合
  • 包含m个无序、可重复区间的集合(每个区间由上下界整数定义)

需构建整数与区间的配对,满足以下条件:

  • 整数必须落在对应区间范围内才能配对
  • 每个整数和区间最多参与一次配对
  • 目标是最大化配对总数,无需关注具体配对方案

示例说明

  • 整数2与区间[4,10]无法配对,最大配对数为0
  • 整数2与区间[2,10]可形成1对,最大配对数为1
  • 整数集合{3,7,8,12}与区间集合{[0,10], [5,15], [20,25]}的最大配对数为2

现有算法与优化需求

朴素算法的时间复杂度为O(nm),现需探讨是否存在时间复杂度为O(max(nlogn, mlogm, nlogm, mlogn))的高效算法。

高效算法实现思路

可以通过排序+贪心的策略实现目标时间复杂度,步骤如下:

  1. 排序预处理

    • 将整数集合按升序排序
    • 将区间集合按右边界升序排序,若右边界相同则按左边界升序排序
  2. 贪心匹配

    • 遍历排序后的每个整数x:
      • 在未被匹配的区间中,找到右边界最小且左边界≤x≤右边界的区间
      • 找到后将该整数与区间配对,标记区间为已使用
    • 也可以反过来遍历排序后的区间,寻找未被匹配的最小满足条件的整数,两种方式时间复杂度相近
  3. 高效查找实现
    为了快速定位符合条件的区间/整数,可使用二叉搜索树(如C++的std::set、Java的TreeSet)或二分查找:

    • 若遍历整数,可将区间按右边界排序后,用二分查找定位候选区间,再用数据结构维护未使用区间的左边界,快速找到满足左边界≤x的最小右边界区间
    • 时间复杂度分析:排序阶段耗时O(nlogn + mlogm),每次查找和更新操作耗时O(logm)(或O(logn)),总时间复杂度为O(nlogn + mlogm + nlogm),完全符合O(max(nlogn, mlogm, nlogm, mlogn))的要求

算法正确性说明

贪心策略的核心逻辑是:用右边界最小的可用区间匹配当前整数,这样能保留右边界更大的区间去适配后续更大的整数,从而最大化整体配对数。该策略能保证得到最优解——若存在更优的配对方案,可通过调整配对顺序,将其转化为贪心策略得到的方案,配对总数不会减少。

内容的提问来源于stack exchange,提问作者North face

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 09:05:06