用于存储帕累托最优解的高效结构

Jen*_*das 5 c++ optimization data-structures

我正在尝试解决需要在计算过程中存储帕累托最优解的问题。我将把一组帕累托最优解称为袋子。

到目前为止,我只有两个标准,这允许基于数组的非常有效的解决方案,其中元素根据第一个标准降序排序,并根据第二个标准升序。这种数组的一个例子是:

[(100, 0), (50, 1), (-10, 3)]
Run Code Online (Sandbox Code Playgroud)

(关于帕累托最优 - wiki

但是最近我发现我需要添加第三个标准,对于这样的扩展,上述方法似乎不适用。我试图用谷歌搜索是否有人已经解决了这个问题,但没有发现任何令人满意的东西。也许我在问谷歌错误的问题。

更准确地说,我需要的是:能够存储相互非支配的帕累托最优元素的结构。我需要将元素插入到结构中,我需要遍历元素但没有特定的顺序。就我而言,通常不会有超过 4-5 个元素,但有时会多达 10-20 个。在我的算法中经常会插入包中,所以我需要它们尽可能快。

该应用程序是用 C++ 编写的,但它可能并不真正相关。

任何帮助将非常感激。

编辑:我已经有了自己的一些想法 - 将元素排列成某种三角形结构,但我无法将这个想法正式化。

Edit2:请注意,我要求在每次插入后,结构中只保留相互非支配的元素。例如,如果我有一组非支配三元组{(1,2,3), (3, 1, 1)}并添加三元组,(3, 3, 3)我将得到 set {(3,3,3)}

Edit3:为了更清楚元素的支配地位 - 我们说,在这种特殊情况下,当且仅当且至少一个不等式是严格的时,三元组(a,b,c)占主导地位- 。(e,f,g)a >= e && b >= f && c >= g>

Cod*_*dor 0

如果我正确理解了这个问题,那么您正在寻找整数三元组的合适的字典顺序。然而,尚不清楚为什么您希望以排序的方式存储帕累托前沿,因为您声明您希望以不特定的顺序进行迭代。也许 a set(在标准库中实现)已经足够了。