2016-12-18 7 views
1

У меня есть два массива:Как это эффективно решить?

  1. score[n]

  2. pos[n], где п = < 10^5; поз [я], оценка [я] < = 10^4

Определение:

f(i,j) = abs(pos[i]-pos[j])*max(score[i],score[j]) 

Мне нужно найти сумму f(i,j) для всех i,j с.
У меня есть алгоритм, который может решить его в O(n^2), но я хочу оптимизировать.
Я потратил много времени, но не смог.

Любая помощь приветствуется. Худший код случая http://ideone.com/q4qSNh

+2

Можете ли вы предоставить фрагмент или фрагменты кода для лучшего контекста, пожалуйста? – ganjeii

+2

Ваша функция f симметрична по i и j, то есть f (i, j) = f (j, i), поэтому простая оптимизация состоит в том, чтобы оценивать только треугольник и затем удваивать результат. Тем не менее O (n^2), но только половина усилия. – Henry

+0

Я подумал, что – prem

ответ

0

Существует аналогичный вопрос, заданный ранее. См. here.

@ Gribouillis предоставил хороший алгоритм, который имеет сложность, состоящую в сортировке и использовании сбалансированных двоичных деревьев поиска. Посмотрите here для получения полного ответа

Реализация оставлена ​​в качестве упражнения.