我想从表示格式为“x y z”的坐标的矩阵中删除数字。一个例子:
1.211 1.647 1.041
2.144 2.684 1.548
1.657 2.245 1.021
1.657 0.984 2.347
2.154 0.347 2.472
1.211 1.647 1.041
在此示例中,坐标 1 和 6 相同(x、y 和 z 相同),我想删除它们,但我不想删除只有一个值等于 x 的坐标 3 和 4 的情况-协调)。
这些值在一个文本文件中,我想在另一个文件甚至同一个文件中打印坐标而不重复。
最佳答案
一个非常简单的解决方案是将每一行视为一个字符串并使用一组字符串。当你逐行遍历文件时,你检查当前行是否存在于集合中,如果不存在,你插入并打印它。 复杂度:O(nlogn),需要额外的内存:最坏情况下几乎与输入文件相同
与之前的解决方案具有相同的复杂性和最坏情况下的内存消耗,您可以将文件加载到内存中,按行排序,然后在打印时轻松跳过重复项。如果允许对文件重新排序,也可以在文件内部完成同样的操作,这样您需要的额外内存很少,但速度要慢得多。
如果内存和存储是个问题(我假设你不能复制文件),你可以使用简单的方法在打印前将当前行与所有之前的行进行比较,时间复杂度为 O(n^2)复杂但没有额外的内存。然而,这是一个相当糟糕的解决方案,因为您必须多次从文件中读取,与主内存相比,这可能非常慢。
关于C++:删除矩阵中的重复数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32355216/