Среднее значение попарной разницы всех пар, образованных из заданных N целых чисел

Опубликовано: 20 Сентября, 2022

Учитывая массив arr[] , содержащий N целых чисел, задача состоит в том, чтобы вычислить среднее значение разницы между обоими элементами в парах, образованных из заданных N целых чисел.

Примеры:

Input: arr[] = {-1, 3, -5, 4}
Output: 5.166667
Explanation: There are 6 possible pair of points in the given array with the pairwise difference as: diff(-1, 3) = 4, diff(-1, -5) = 4, diff(-1, 4) = 5, diff(3, -5) = 8, diff(3, 4) = 1, diff(-5, 4) = 9. Therefore, average pairwise difference is (4 + 4 + 5 + 8 + 1 + 9)/6 = 31/6 = 5.166667.

Input: arr[] = { -1, 2, -3, 7, -6 }
Output: 6.2

Подход: Эту проблему можно решить, используя жадный подход и метод суммы префиксов. Если точки в массиве arr[] отсортированы, то сумма расстояний от i точки до всех больших точек может быть вычислена как: (arr[i+1] – arr[i]) + (arr[ i+2] – обр[i]) … + (обр[N-1] – обр[i]) => (обр[i+1] + обр[i+2]… + обр[N-1]) – обр[i] * (N – 1 – i) . Используя это наблюдение, данная проблема может быть решена с помощью следующих шагов:

  • Сначала отсортируйте массив arr[] в порядке неубывания.
  • Создайте массив суммы префиксов pre[] из массива arr[] .
  • Перебрать каждый индекс i и добавить (pre[N – 1] – pre[i]) – arr[i] * (N – 1 – i) в переменную ans .
  • Требуемый ответ: ans/количество пар => ans/(N*(N-1)/2) .

Ниже приведена реализация вышеуказанного подхода:

Временная сложность: O (N * log N)
Вспомогательное пространство: O(1)