在解决问题之前,让我先解释一些定义:
假设 A 点是一个坐标(可能有双精度值),例如 (1.2,3.5,4.3,2.6),与 B 点相同。
A 点优于 B 点,当且仅当 1. A 点所有坐标 <= B 点所有坐标,且 2. A 点一个坐标 < B 点对应坐标
例如:给定
A=(2,3,4,5)
B=(2,3,4,6)
A 支配 B,因为条件 1 成立,并且对于条件 2,A 的第四个分量 < B 的第四个分量。
再举一个例子,
A=(2,3,4,5)
B=(2,3,4,5)
A 都不支配 B,反之亦然,因为条件 2 在两种情况下都不成立。
现在给定一个n维坐标列表,我希望找到不被其他人支配的坐标集合,这些坐标称为天际线集合。
假设我有 5 个维度的坐标
(2,1,2,1,2)
(1,2,1,2,1)
(3,3,3,3,3)
(4,4,4,4,4)
天际线集是
(2,1,2,1,2)
(1,2,1,2,1)
现在我想写一个函数:
List<double[]> SkylineSet(List<double[]> Coordinates, int dimension)
给定示例输入:
List<double[]> newList=new List<double[]>();
newList.Add(new double[] {2, 1, 2, 1, 2});
newList.Add(new double[] { 1, 2, 1, 2, 1 });
newList.Add(new double[] { 3, 3, 3, 3, 3 });
newList.Add(new double[] { 4, 4, 4, 4, 4 });
SkylineSet(newList,5)
将输出
(2,1,2,1,2)
(1,2,1,2,1)
这可以通过每个坐标的成对比较来实现,但是坐标的数量可能非常大,有人知道如何有效地解决这个问题吗?