c++ - 计算所有对之间的曼哈顿距离

标签 c++ algorithm sorting optimization time-complexity

我有一个矩阵中某些顶点的 (x,y) 坐标的列表(c++ 中的 vector ),例如 [ (0,2) , (0,3) , (1,2) , (2 ,2) ] 。我想计算列表中每对顶点之间的曼哈顿距离。 目前我正在使用两个循环:

for(int i=0;i<size-1;i++)
        {
            for(int j=i+1;j<size;j++)
            {
                dist=abs(v[i][0]-v[j][0])+abs(v[i][1]-v[j][1]);
                //Process dist
            }
        } 

这种方法的时间复杂度为 O(n^2)。有没有时间复杂度更小的更好方法来做到这一点?

最佳答案

由于输出的大小是 \Theta(n^2) 并且每对的每个曼哈顿距离的复杂度在 O(1) 中,您可以不再提高复杂性。

关于c++ - 计算所有对之间的曼哈顿距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52905348/

相关文章:

algorithm - 带有互斥元素的背包

algorithm - 解码 HID 数据

java - 如何在Java中将一个整数插入到已排序的List中?

algorithm - 这是什么样的排序?

c++ - 段错误,无法找到任何指针为 NULL 的位置

c++ - 指向基类的指针总是 <= 指向派生类的指针吗?

c++ - 关于线程安全引用计数的另一个问题

c++ - 流运算符重载问题

algorithm - 合并两个全局刚性图

c# - 从列表中获取前 5 个分数/名称