Skip to content

Commit 3918d9e

Browse files
authored
Add three new distance formulas (#3203)
-Manhattan Distance -Hamming Distance -Minkowski Distance
1 parent 9b13852 commit 3918d9e

File tree

2 files changed

+119
-27
lines changed

2 files changed

+119
-27
lines changed
Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,46 @@
11
package com.thealgorithms.maths;
22

33
public class DistanceFormula {
4-
public static double distance(double x1, double y1, double x2, double y2)
5-
{
6-
double dX = Math.pow(x2-x1, 2);
7-
double dY = Math.pow(y2-x1, 2);
8-
double d = Math.sqrt(dX+dY);
4+
public static double euclideanDistance(double x1, double y1, double x2, double y2) {
5+
double dX = Math.pow(x2 - x1, 2);
6+
double dY = Math.pow(y2 - x1, 2);
7+
double d = Math.sqrt(dX + dY);
8+
return d;
9+
}
10+
11+
public static double manhattanDistance(double x1, double y1, double x2, double y2) {
12+
double d = Math.abs(x1 - x2) + Math.abs(y1 - y2);
13+
return d;
14+
}
15+
16+
public static int hammingDistance(int[] b1, int[] b2) {
17+
int d = 0;
18+
19+
if (b1.length != b2.length) {
20+
return -1; // error, both array must be have the same length
21+
}
22+
23+
for (int i = 0; i < b1.length; i++) {
24+
d += Math.abs(b1[i] - b2[i]);
25+
}
26+
27+
return d;
28+
}
29+
30+
public static double minkowskiDistance(double[] p1, double[] p2, int p) {
31+
double d = 0;
32+
double distance = 0.0;
33+
34+
if (p1.length != p2.length) {
35+
return -1; // error, both array must be have the same length
36+
}
37+
38+
for (int i = 0; i < p1.length; i++) {
39+
distance += Math.abs(Math.pow(p1[i] - p2[i], p));
40+
}
41+
42+
distance = Math.pow(distance, (double) 1 / p);
43+
d = distance;
944
return d;
1045
}
1146
}
Lines changed: 79 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,85 @@
11
package com.thealgorithms.maths;
22

3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
35
import org.junit.jupiter.api.Assertions;
46
import org.junit.jupiter.api.Test;
57

6-
public class DistanceFormulaTest
7-
{
8-
@Test
9-
void test1()
10-
{
11-
Assertions.assertEquals(DistanceFormula.distance(1,1,2,2), 1.4142135623730951);
12-
}
13-
@Test
14-
void test2()
15-
{
16-
Assertions.assertEquals(DistanceFormula.distance(1,3,8,0), 7.0710678118654755);
17-
}
18-
@Test
19-
void test3()
20-
{
21-
Assertions.assertEquals(DistanceFormula.distance(2.4,9.1,55.1,100), 110.91911467371168);
22-
}
23-
@Test
24-
void test4()
25-
{
26-
Assertions.assertEquals(DistanceFormula.distance(1000,13,20000,84), 19022.067605809836);
27-
}
8+
public class DistanceFormulaTest {
9+
@Test
10+
void euclideanTest1() {
11+
Assertions.assertEquals(DistanceFormula.euclideanDistance(1, 1, 2, 2), 1.4142135623730951);
12+
}
13+
14+
@Test
15+
void euclideanTest2() {
16+
Assertions.assertEquals(DistanceFormula.euclideanDistance(1, 3, 8, 0), 7.0710678118654755);
17+
}
18+
19+
@Test
20+
void euclideanTest3() {
21+
Assertions.assertEquals(DistanceFormula.euclideanDistance(2.4, 9.1, 55.1, 100), 110.91911467371168);
22+
}
23+
24+
@Test
25+
void euclideanTest4() {
26+
Assertions.assertEquals(DistanceFormula.euclideanDistance(1000, 13, 20000, 84), 19022.067605809836);
27+
}
28+
29+
@Test
30+
public void manhattantest1() {
31+
assertEquals(DistanceFormula.manhattanDistance(1, 2, 3, 4), 4);
32+
}
33+
34+
@Test
35+
public void manhattantest2() {
36+
assertEquals(DistanceFormula.manhattanDistance(6.5, 8.4, 20.1, 13.6), 18.8);
37+
}
38+
39+
@Test
40+
public void manhattanTest3() {
41+
assertEquals(DistanceFormula.manhattanDistance(10.112, 50, 8, 25.67), 26.442);
42+
}
43+
44+
@Test
45+
public void hammingTest1() {
46+
int[] array1 = { 1, 1, 1, 1 };
47+
int[] array2 = { 0, 0, 0, 0 };
48+
assertEquals(DistanceFormula.hammingDistance(array1, array2), 4);
49+
}
50+
51+
@Test
52+
public void hammingTest2() {
53+
int[] array1 = { 1, 1, 1, 1 };
54+
int[] array2 = { 1, 1, 1, 1 };
55+
assertEquals(DistanceFormula.hammingDistance(array1, array2), 0);
56+
}
57+
58+
@Test
59+
public void hammingTest3() {
60+
int[] array1 = { 1, 0, 0, 1, 1, 0, 1, 1, 0 };
61+
int[] array2 = { 0, 1, 0, 0, 1, 1, 1, 0, 0 };
62+
assertEquals(DistanceFormula.hammingDistance(array1, array2), 5);
63+
}
64+
65+
@Test
66+
public void minkowskiTest1() {
67+
double[] array1 = { 1, 3, 8, 5 };
68+
double[] array2 = { 4, 2, 6, 9 };
69+
assertEquals(DistanceFormula.minkowskiDistance(array1, array2, 1), 10);
70+
}
71+
72+
@Test
73+
public void minkowskiTest2() {
74+
double[] array1 = { 1, 3, 8, 5 };
75+
double[] array2 = { 4, 2, 6, 9 };
76+
assertEquals(DistanceFormula.minkowskiDistance(array1, array2, 2), 5.477225575051661);
77+
}
78+
79+
@Test
80+
public void minkowskiTest3() {
81+
double[] array1 = { 1, 3, 8, 5 };
82+
double[] array2 = { 4, 2, 6, 9 };
83+
assertEquals(DistanceFormula.minkowskiDistance(array1, array2, 3), 4.641588833612778);
84+
}
2885
}

0 commit comments

Comments
 (0)