微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 寻找天际线集

解决问题之前,我先解释一下这个定义:

说点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,6)

A由于条件1成立,因此占优势B,对于条件2,A的第四成分为A <1. B的第四部分 再举另一个例子,

A=(2,5)

A既不支配B,反之亦然,因为条件2在两种情况下都不成立.

现在给出一个n维坐标列表,我希望找到不受其他人支配的坐标集,
这些坐标称为天际线集.

假设我有5个维度的坐标

(2,1,2,2)
(1,1)
(3,3)
(4,4)

天际线组是

(2,1)

现在我想写一个函数

List<double[]> Skylineset(List<double[]> Coordinates,int dimension)

给出示例输入:

List<double[]> newList=new List<double[]>();
 newList.Add(new double[] {2,2});
 newList.Add(new double[] { 1,1 });
 newList.Add(new double[] { 3,3 });
 newList.Add(new double[] { 4,4 });

输出Skylineset(newList,5)

(2,1)

这可以通过每个坐标的成对比较来实现,但是
坐标的数量可以非常大,任何人都有想法如何有效地解决这个问题?

解决方法

将点放在K-D树(或某些此类数据结构)中.现在,您可以有效地找到由给定点支配的点.删除那些占主导地位的人,重复所有剩余的分数.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐