加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 寻找天际线集

发布时间:2020-12-15 21:40:11 所属栏目:百科 来源:网络整理
导读:在解决问题之前,我先解释一下这个定义: 说点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成立,因此
在解决问题之前,我先解释一下这个定义:

说点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树(或某些此类数据结构)中.现在,您可以有效地找到由给定点支配的点.删除那些占主导地位的人,重复所有剩余的分数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读