曼哈顿距离

曼哈顿距离转换到切比雪夫距离

纵饮孤独 提交于 2019-11-28 00:32:33
定义 在平面内, 1. 欧几里得距离($Euclidean Metric$):$\sqrt {(x_1-x_2)^2 + (y_1-y_2)^2}$. 2. 曼哈顿距离($Manhattan Distance$):$\sqrt {(x_1-x_2)^2 + (y_1-y_2)^2}$. 3. 切比雪夫定理($Chebyshev Distance$):$max(|x_1-x_2|, |y_1-y_2|)$. 转换 这里只介绍曼哈顿距离转换成欧几里得距离,反过来是类似的。 定理 :$(x_1, y_1)$ 与 $(x_2, y_2)$ 的曼哈顿距离等于 $(x_1-y_1, x_1+y_1)$ 与 $(x_2-y_2, x_2+y_2)$ 的切比雪夫距离。 1. 从几何意义 距原点曼哈顿距离为 $a$ 的点组组成了一个正方形:$(a,0),(0,a),(-a,0),(0,-a)$. 同样,距原点切比雪夫距离为 $a$ 的点也组成一个正方形:$(a,a),(-a,a),(-a,-a),(a,-a)$. 建立一个一一映射,即相当于将曼哈顿距离中的点逆时针旋转 $45$ 度,再扩大 $\sqrt 2$ 倍。 设点 $A(x,y)$,由旋转公式,${x}' = \sqrt 2(cos\theta\cdot x - sin \theta\cdot y), \ {y}' = \sqrt 2(sin

[bzoj1941][Sdoi2010]Hide and Seek_KD-Tree

|▌冷眼眸甩不掉的悲伤 提交于 2019-11-27 17:50:44
Hide and Seek bzoj-1941 Sdoi-2010 题目大意 :给出平面上n个点,选出一个点,使得距离这个点的最远点曼哈顿距离减去距离这个点的最近非己点的曼哈顿距离最小。输出最小曼哈顿距离差。 注释 :$1\le n \le 5\cdot 10^5$。 想法 :这个题的话处理方法就是枚举所有点,然后对于每一个点求近邻点和“远”邻点。 其实区别就是估价函数的区别。近邻点对的估价函数就是 SJY摆旗子的估价函数 。 远邻点的话我们就另设一个估价函数,就表示当前点到这个矩形的可能最远曼哈顿距离。也就是矩形的4个顶点中距离当前点曼哈顿距离最远的曼哈顿距离。 然后枚举更新答案即可。 最后 ,附上丑陋的代码... ... #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #define N 1000010 #define inf 0x7f7f7f7f using namespace std; int ans_min,ans_max,root,d; struct Node { int c[2],p[2],maxn[2],minn[2]; }a[N]; inline bool cmp(const Node &a,const Node &b) { return a.p[d]==b

利用word分词来计算文本相似度

懵懂的女人 提交于 2019-11-27 01:11:16
word分词 提供了多种文本相似度计算方式: 方式一:余弦相似度,通过计算两个向量的夹角余弦值来评估他们的相似度 实现类: org.apdplat.word.analysis.CosineTextSimilarity 用法如下: String text1 = "我爱购物"; String text2 = "我爱读书"; String text3 = "他是黑客"; TextSimilarity textSimilarity = new CosineTextSimilarity(); double score1pk1 = textSimilarity.similarScore(text1, text1); double score1pk2 = textSimilarity.similarScore(text1, text2); double score1pk3 = textSimilarity.similarScore(text1, text3); double score2pk2 = textSimilarity.similarScore(text2, text2); double score2pk3 = textSimilarity.similarScore(text2, text3); double score3pk3 = textSimilarity.similarScore

机器学习——几种距离度量方法比较

大憨熊 提交于 2019-11-27 01:11:00
1. 欧氏距离(Euclidean Distance) 欧氏距离是最容易直观理解的距离度量方法,我们小学、初中和高中接触到的两个点在空间中的距离一般都是指欧氏距离。 二维平面上点a(x1,y1)与b(x2,y2)间的欧氏距离: 三维空间点a(x1,y1,z1)与b(x2,y2,z2)间的欧氏距离: n维空间点a(x11,x12,…,x1n)与b(x21,x22,…,x2n)间的欧氏距离(两个n维向量): Matlab计算欧氏距离: Matlab计算距离使用pdist函数。若X是一个m×n的矩阵,则pdist(X)将X矩阵每一行作为一个n维行向量,然后计算这m个向量两两间的距离。 X=[1 1;2 2;3 3;4 4]; d=pdist(X,'euclidean') d= 1.4142 2.8284 4.2426 1.4142 2.8284 1.4142 2. 曼哈顿距离(Manhattan Distance) 顾名思义,在曼哈顿街区要从一个十字路口开车到另一个十字路口,驾驶距离显然不是两点间的直线距离。这个实际驾驶距离就是“曼哈顿距离”。曼哈顿距离也称为“城市街区距离”(City Block distance)。 二维平面两点a(x1,y1)与b(x2,y2)间的曼哈顿距离: n维空间点a(x11,x12,…,x1n)与b(x21,x22,…,x2n)的曼哈顿距离: