問題に進む前に、いくつかの定義を説明しましょう。
ポイントAは、ポイントBと同じ座標(2倍の値を持つ可能性があります)、たとえば(1.2,3.5,4.3,2.6)であると言います。
点Aが点Bを支配します。ただし、1。点Aのすべての座標<=点Bのすべての座標、および2.点Aの1つの座標<点Bの対応する座標
例:与えられた
A=(2,3,4,5)
B=(2,3,4,6)
条件1が成立するためAがBを支配し、条件2の場合、Aの4番目の成分<Bの4番目の成分。
別の例を考えると、
A=(2,3,4,5)
B=(2,3,4,5)
どちらの場合も条件2が成立しないため、AがBを支配することはなく、その逆も同様です。
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)
これは、各座標のペアワイズ比較によって達成できますが、座標の数は非常に多くなる可能性があります。これを効率的に解決する方法を知っている人はいますか?