arrays - 如何有效地比较二维数组
问题描述
这是一个二维数组
{ {0.3072, 1.1262, 1.5706},
{0.5068, 1.0630, 0.9470},
{0.2470, 0.6872, 1.9626},
{1.0686, 1.1348, 1.7506},
{1.2874, 1.5664, 0.2470},
{0.9072, 0.6268, 0.6684},
{1.3164, 0.6506, 1.8462},
{0.9072, 0.6268, 0.8706},
{0.3072, 1.1262, 1.5706} }
我需要根据以下条件比较每一行:
- a 点的所有坐标都小于或等于它们对应的 b 点坐标。
- 至少存在一个点 a 的坐标严格小于其对应的点 b 的坐标。
如果条件为真,那么我将删除点b。这里有些例子:
- 第 1 点和第 4 点比较后,第 4 点将被删除。因为点 1 的所有坐标都小于它们对应的点 4 的坐标。
- 第 6 点和第 8 点比较后,第 8 点将被删除。因为点 6 的坐标 3 小于点 8 的对应坐标,尽管它们的其他两个坐标具有相同的值。
- 点 1 和点 2 比较后,不会删除任何点。因为点 1 的坐标 1 小于点 2 的对应坐标,但是点 1 的坐标 2 和坐标 3 大于点 2 的对应坐标,反之亦然。
- 第 1 点和第 9 点比较后,不会删除任何点。因为它们的所有坐标都是等价的。
从上面的二维数组中,我将删除点 4,7,8。
我的尝试:我正在使用嵌套循环来比较所有点
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
int sum = 0;
for(int k = 0; k < 3; k++){
if(point[i][k] <= point[j][k])
sum++;
}
if(sum == 3)
... // delete point[j]
}
}
这种尝试有效,但效率不高,它的大 O 表示法是 O(n^3)。是否有任何有效的算法可以进行这种比较?
解决方案
推荐阅读
- elasticsearch - 在弹性搜索中交换字段名称
- java - Java 程序计算可以从袋子中取出相同球的方法有多少种
- python - 在 Python 中使用正则表达式在 CSV 文件中搜索特定短语
- laravel - 向laravel的auth控制器登录提交请求后如何修复404未找到
- android - 房间实时数据不正确
- android - Android installreferrer1.1 错误
- flutter - 如何使用颤振禁用键盘中的表情符号按钮
- image - AnyChart 使用鼠标在图表中移动和调整图像大小
- java - Visual Studio Code:Java 应用程序和远程调试
- c# - 如何在本地使用 Azure ServiceBus