2016-02-22 4 views
0

Могу ли я сделать его более простым?Упростить вычисляющую разницу между каждым элементом и элементами справа.

for(int k=0;k<n;k++) 
for(int l=(k+1);l<n;l++) 
{ 
    tot+=(max(a[k],a[l])-min(a[k],a[l])); 
} 

Эта программа в настоящее время занимает больше времени для выполнения и превышения срока.

+0

Насколько велика 'n'? И что именно вы пытаетесь достичь. Попытка оптимизировать этот код бессмысленна, не зная, чего вы хотите добиться. Может быть, вы идете об этом, ПОЛНОСТЬЮ неправы, и есть что-то гораздо более простое, чтобы получить то, что вы хотите. –

+0

он должен быть в C++. –

+2

Вы можете заменить 'max (a [k], a [l]) - min (a [k], a [l])' что-то вроде 'abs (a [k] - a [l])'. Для большего улучшения нам нужно знать, чего вы действительно хотите – Marc

ответ

0

Вот несколько проще версия:

var k = -1, 
    l, tot 

while(++k < n){ 
    l = k 
    while(++l < n){ 
    tot += Math.abs(a[k] - a[l]) 
    } 
} 

Это также можно получить ту же функциональность очень сжато с синтаксисом ES6, хотя я не уверен, какая версия быстрее производительность мудрым. Вот fiddle с двумя методами рядом.

"use strict"; 
var a = [3, 22, 12, 99, 1, 6, 19]; 
var test = a.reduce((previousValue, currentValue, currentIndex, array) => { 
    return previousValue + a.reduce((pv, cv, ci, arr) => { 
    return ci > currentIndex ? pv + Math.abs(cv - currentValue) : pv 
    }, 0) 
}, 0) 
console.log(test) 
+0

Оба являются O (n^2) – fafl

0

Мне кажется, вы пытаетесь вычислить разницу между каждым элементом и всеми элементами справа от него. То, что вы могли бы сделать, это рассчитать сумму всего массива, тогда каждый раз, когда вы переходите от одного элемента к следующему вычитаете, что конкретное число из общей суммы, а общая разница теперь будет всего лишь суммой текущего элемента.

// Sort the array 'a' first and then run this. 
int sum = calculateSum() // Write this method yourself to find total 
for (int i = 0; i < n; i++) 
{ 
    sum -= a[i]; 
    tot += (sum - a[i] * (n - i + 1)); 
} 

Последняя строка вычитает из суммы полных различий, принимая во внимание, сколько раз вы бы идеально вычитаются элемент в рассмотрении.

Смежные вопросы