【发布时间】:2019-09-29 01:42:48
【问题描述】:
我想根据两个标准对项目列表进行排序。每个项目都包含一个间隔和一个数字。
Items[0] = {Interval=[10..30], Number = 7}
Items[1] = {Interval=[20..40], Number = 5}
Items[2] = {Interval=[30..50], Number = 3}
Items[3] = {Interval=[40..60], Number = 2}
我想根据区间“模糊排序”这个列表:一个较早项目的区间下限不大于后面项目的区间上限的顺序。
例如items[3]不应排在items[0]之前,因为[40..60]严格大于[10..30]。但items[1] 可能出现在items[0] 之前或之后,因为它们的间隔重叠。
因此,可以通过按下限、上限、中点或每个区间内的任意数字进行排序来实现有效的排序。
从所有这些可能的排序中,我想选择一个按Number 排序的排序作为第二个标准。对于所有可以交换的项目,因为它们的间隔重叠,我想交换它们,以便 Item.Number 递增。
因此,以下将是一个有效的顺序,按Interval 升序排序,然后按Number 升序排序:
Items[2] = {Interval=[30..50], Number = 3}
Items[1] = {Interval=[20..40], Number = 5}
Items[0] = {Interval=[10..30], Number = 7}
Items[3] = {Interval=[40..60], Number = 2}
有多个同样有效的解决方案。这也是使用相同标准的有效订单:
Items[0] = {Interval=[10..30], Number = 7}
Items[3] = {Interval=[40..60], Number = 2}
Items[2] = {Interval=[30..50], Number = 3}
Items[1] = {Interval=[20..40], Number = 5}
除了蛮力之外,有没有一种有效的算法来找到这样的排序?
这种类型或排序有名称吗?
【问题讨论】:
标签: algorithm sorting language-agnostic intervals