Как сравнить два массива и найти наилучшее соответствие?

Например, у меня есть:

array[3] arr1 = {.5,.5,0}
array[3] arr2 = {.5,0,.5}
array[3] arr3 = {0,.5,.5}
array[3] findarr = {1,1,0}

Очевидно, что arr1 лучше всего подходит для findarr. У меня уже есть простой рабочий алгоритм, но я хочу знать, есть ли формула, как это сделать?

Спасибо!


person user488792    schedule 02.03.2011    source источник
comment
Таким образом, наилучшее соответствие означает наиболее близкое числовое значение с учетом порядка? В любом случае, давайте посмотрим на ваш алгоритм!   -  person BoltClock    schedule 02.03.2011


Ответы (2)


f = pow(arrX[0]-findarr[0],2) + pow(arrX[1]-findarr[1],2) + pow(arrX[2]-findarr[2],2);

pow(x,2) == x*x

Таким образом, «лучшим соответствием» будет массив с наименьшим f

person CyberDem0n    schedule 02.03.2011
comment
Привет спасибо! это то, что я использую сейчас, но я не в квадрате. я собираюсь добавить это - person user488792; 02.03.2011
comment
@ user488792: В зависимости от того, что вы делаете, вы также можете попробовать fabs(arrX[0]-findarr[0]) вместо pow(...,2) или взять максимальные абсолютные значения различий. Это разные векторные нормы вместо евклидова расстояния (в ответе предлагается использовать квадрат расстояния, что эквивалентно для сравнений). - person Jeremiah Willcock; 02.03.2011

Здесь уже ответили. Просто просмотрите его, чтобы получить представление.
Вы можете сделать это аналогичным образом.

Немного связано.

В PHP это можно сделать с помощью функции array_intersect.< a href="https://stackoverflow.com/questions/4065431/compare-2-arrays-for-likeness">[+]

person Saurabh Gokhale    schedule 02.03.2011