Find a point such that sum of the Manhattan distances is minimized

19 May, 2021
Given N points in K dimensional space where and . The task is to determine the point such that the sum of Manhattan distances from this point to the N points is minimized. Manhattan distance is the distance between two points measured along axes at right angles. In a plane with p1 at (x1, y1) and p2 at (x2, y2), it is |x1 – x2| + |y1 – y2|.
Examples: 
Input: N = 3, K = 3, Points = {1, 1, 1}, {2, 2, 2}, {3, 3, 3} Output: 2 2 2 Input: N = 4, K = 4, Points = {1, 6, 9, 6}, {5, 2, 5, 7}, {2, 0, 1, 5}, {4, 6, 3, 9} Output: 2 2 3 6 
Approach: To minimize the Manhattan distance, all we have to do is just sort the points in all K dimensions and output the middle elements of each of the K dimensions.
Below is the implementation of the above approach: 
C++
Java
Python
C#
PHP
Javascript
// C++ implementation of above approach#include <bits/stdc++.h>using namespace std; // Function to print the required points which// minimizes the sum of Manhattan distancesvoid minDistance(int n, int k, vector<vector<int> >& point){     // Sorting points in all k dimension    for (int i = 0; i < k; ++i)        sort(point[i].begin(), point[i].end());     // Output the required k points    for (int i = 0; i < k; ++i)        cout << point[i][(ceil((double)n / 2) - 1)] << " ";} // Driver codeint main(){     int n = 4, k = 4;    vector<vector<int> > point = { { 1, 5, 2, 4 },                                   { 6, 2, 0, 6 },                                   { 9, 5, 1, 3 },                                   { 6, 7, 5, 9 } };     // function call to print required points    minDistance(n, k, point);     return 0;}
// Java implementation of above approachimport java.util.Arrays; class GFG{ // Function to print the required// points which minimizes the sum// of Manhattan distancesstatic void minDistance(int n, int k,                        int point[][]){         // Sorting points in all k dimension    for (int i = 0; i < k; i++)        Arrays.sort(point[i]);         // Output the required k points    for (int i = 0; i < k; i++)        System.out.print(point[i][(int)               Math.ceil((double)(n / 2) - 1)] + " ");} // Driver codepublic static void main(String[] args){    int n = 4;    int k = 4;    int point[][] = { { 1, 5, 2, 4 },                      { 6, 2, 0, 6 },                       { 9, 5, 1, 3 },                      { 6, 7, 5, 9 } };         // function call to print required points    minDistance(n, k, point);}} // This code is contributed by Bilal
# Python implementation of above approach # Function to print the required points which# minimizes the sum of Manhattan distancesdef minDistance(n, k, point):     # Sorting points in all dimension    for i in range(k):        point[i].sort()     # Output the required k points    for i in range(k):        print(point[i][((n + 1) // 2) - 1], end =" ")  # Driver coden = 4k = 4point = [[1, 5, 2, 4],         [6, 2, 0, 6],         [9, 5, 1, 3],         [6, 7, 5, 9]] # function call to print required pointsminDistance(n, k, point)
// C# implementation of above approachusing System; class GFG{ // Function to print the required// points which minimizes the sum// of Manhattan distancesstatic void minDistance(int n, int k,                        int[][] point){         // Sorting points in all k dimension    for (int i = 0; i < k; i++)        Array.Sort(point[i]);         // Output the required k points    for (int i = 0; i < k; i++)        System.Console.Write(point[i][(int)            Math.Ceiling((double)(n / 2) - 1)] + " ");} // Driver codepublic static void Main(){    int n = 4;    int k = 4;    int[][] point = new int[][]{ new int[]{ 1, 5, 2, 4 },                    new int[]{ 6, 2, 0, 6 },                    new int[]{ 9, 5, 1, 3 },                    new int[]{ 6, 7, 5, 9 } };         // function call to print required points    minDistance(n, k, point);}} // This code is contributed by mits
<?php// PHP implementation of above approach // Function to print the required// points which minimizes the sum// of Manhattan distancesfunction minDistance($n, $k, &$point){     // Sorting points in all    // k dimension    for ($i = 0; $i < $k; ++$i)        sort($point[$i]);     // Output the required k points    for ($i = 0; $i < $k; ++$i)        echo $point[$i][(ceil(            (double)$n / 2) - 1)] . " ";} // Driver code$n = 4;$k = 4;$point = array(array( 1, 5, 2, 4 ),               array( 6, 2, 0, 6 ),               array( 9, 5, 1, 3 ),               array( 6, 7, 5, 9 )); // function call to print// required pointsminDistance($n, $k, $point); // This code is contributed// by ChitraNayal?>
<script>// Javascript implementation of above approach     // Function to print the required// points which minimizes the sum// of Manhattan distances    function minDistance(n,k,points)    {        // Sorting points in all k dimension        for (let i = 0; i < k; i++)            (point[i]).sort(function(a,b){return a-b;});               // Output the required k points        for (let i = 0; i < k; i++)            document.write(point[i][               Math.ceil((n / 2) - 1)] + " ");    }         // Driver code    let n = 4;    let k = 4;    let point = [[1, 5, 2, 4],         [6, 2, 0, 6],         [9, 5, 1, 3],         [6, 7, 5, 9]];         // function call to print required points    minDistance(n, k, point);         // This code is contributed by rag2127</script>
2 2 3 6
 
Time Complexity: O(k*nlog(n) 
bilal-hungund
ukasp
Mithun Kumar
rag2127
Geometric
Mathematical
Sorting
Mathematical
Sorting
Geometric
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Program for distance between two points on earth
Optimum location of point to minimize total distance
Check if two given circles touch or intersect each other
Convex Hull | Set 1 (Jarvis's Algorithm or Wrapping)
Line Clipping | Set 1 (Cohen–Sutherland Algorithm)
Program for Fibonacci numbers
Set in C++ Standard Template Library (STL)
Write a program to print all permutations of a given string
C++ Data Types
Merge two sorted arrays