2011-01-10 88 views
2

我已经在其他语言中看到了各种方法来处理这个问题,但它似乎是一个常见的问题,似乎应该有一个标准的方法来做到这一点。在C++中减少双精度范围

我想将浮动范围列表折叠为最小的表示形式。

2.45-3.72 3.16-6.55 7.23-8.96 8.95-10.27

将成为:

2.45-6.55 7.23-10.27

有C中的函数或库++某处我可以给我的名单,它会为我执行减少?我可以很容易地写我自己的,但为什么打扰,如果它已经存在?

+5

这似乎不是一个很常见的问题(我从来没有遇到过它,至少),这绝对不是你期望在标准库中找到的东西(尽管它可能在第三方库中,我不知道) – 2011-01-10 18:24:06

+0

它不存在,但由于很容易写出你自己的,为什么要问呢? – 2011-01-10 18:24:25

+0

实际解决这个问题的代码会很有趣,尽管它并不那么困难。听起来像一个很好的面试问题。 – Omnifarious 2011-01-10 18:41:05

回答

2

听起来很简单:

  • 开始与范围
  • 的名单让当前 =第一范围列表
  • ,同时有一个下一个范围之后当前
    • 如果下一个重叠当前
      • 延长当前也包含下一个
      • 从列表
    • 否则删除下一个
      • 提前当前一个向前

这应该有所斩断。

1

我不认为会有任何标准提供的解决方案,它的方式太具体。

2

Boost有一个interval library。这并没有明确地包含你所需要的,但是可能使它更容易编写。个人而言,看着文档,它让我担心图书馆不会试图让你清楚地区分封闭和开放的时间间隔。但这对你的目的可能并不重要。