zoukankan      html  css  js  c++  java
  • 曼哈顿距离与切比雪夫距离的互相转化 && 点对距离之和初步

    曼哈顿距离:

    $Manhattandis(i,$ $j)$ $=$ $|x_i$ $-$ $x_j|$ $+$ $|y_i$ $-$ $y_j|;$

    切比雪夫距离:

    $Chebyshevdis(i,$ $j)$ $=$ $max$$(|x_i$ $-$ $x_j|,$ $|y_i$ $-$ $y_j|);$

    曼哈顿距离和切比雪夫距离的互相转化:

    $Manhattandis((x1,$ $y1),$ $(x2,$ $y2))$ $=$ $Chebyshevdis((x1$ $+$ $y1,$ $x1$ $-$ $y1),$ $(x2$ $+$ $y2,$ $x2$ $-$ $y2));$

    $Chebyshevdis((x1,$ $y1),$ $(x2,$ $y2))$ $=$ $Manhattandis((frac {x1 + y1} {2},$ $frac {x1 - y1} {2}),$ $(frac {x2 + y2} {2},$ $frac {x2 - y2} {2}));$

    证明详见 $ ext{OI Wiki}$:

    https://oi-wiki.org/geometry/distance/


    再来引入较为简单的点对距离之和问题:

    $1.$ 对于 $n$ 个数轴上的点,求两两之间的距离总和(要求 $O(n)$ 做法)

    先将这 $n$ 个点排一下序(复杂度不算)。

    设 $f_i$ 表示第 $i$ 个点到它左边的 $i$ $-$ $1$ 个点的总距离,$dis(i, j)$ 表示第 $i$ 个点和第 $j$ 个点之间的距离,那么容易发现答案就是 $Σ$ $f_i$ 。

    那么考虑得出 $f_i$ 和 $f_{i - 1}$ 之间的关系。

    容易发现第 $i$ 个点到前 $i$ $-$ $1$ 个点的距离都比第 $i$ $-$ $1$ 个点到前 $i$ $-$ $1$ 个点大了 $dis(i,$ $i$ $-$ $1)$ (其中一个点到自身的距离为 $0$)。

    所以可以较为轻松地得出递推式:

    $f_i$ $=$ $f_{i - 1}$ $+$ $(i$ $-$ $1)$ $*$ $dis(i,$ $i$ $-$ $1);$

    因此就可以 $O(n)$ 地递推顺便再累加得出答案了。

    $2.$ 对于 $n$ 个平面上的点,求两两之间的曼哈顿距离总和(要求 $O(n)$ 做法)

    首先容易发现,求曼哈顿距离总和是可以拆成分别求横坐标之差的总和和纵坐标之差的总和的。

    因此模仿数轴上的做法,先按横坐标排一下序,同数轴上做法求出横坐标之差的总和;再按纵坐标排一下序,同理求出纵坐标之差的总和。

    因此答案就是将这两个值加起来。

    $3.$ 对于 $n$ 个平面上的点,求两两之间的切比雪夫距离总和(要求 $O(n)$ 做法)

    依照上面曼哈顿距离和切比雪夫距离的转换来将输入的点的坐标转换成对应的求曼哈顿距离的坐标,这样再按照上面的做法求一遍就可以了。

  • 相关阅读:
    js 日期插件 datepicker
    Yii 安装二维码扩展Qrcode
    Yii2 验证码
    Yii 通过composer 安装的方法
    JQery icheck 插件
    Yii 设置 flash消息 创建一个渐隐形式的消息框
    Yii2 自动更新时间created_at updated_at
    MySQL 安装与使用(二)
    MySQL 安装与使用(一)
    Nginx使用(配置开机启动)
  • 原文地址:https://www.cnblogs.com/qqq1112/p/15121123.html
Copyright © 2011-2022 走看看