Как да сравним приликата между два масива? Кажете, че имам:
Base Array: [.5,0,0,0,.25,0,0,.25,0,0,0,0]
Array 1: [1,0,0,0,1,0,0,1,0,0,0,0]
Array 2: [0,0,1,0,0,0,1,0,0,1,0,0]
Array 3: [1,0,0,0,0,0,0,0,0,0,0,0]
По отношение на масивите по-горе, отговорът трябва да бъде масив 1. Отговорът е масив 1, защото елементите на масива са „по-близки“ по структура до елементите на масива на основния масив. За разлика от масив 3, .25 е по-близо до 1, отколкото до 0. Друг пример:
Base Array: [.75,0,0,0,0,0,0,0,.25,0,0,0]
Array 1: [1,0,0,0,1,0,0,1,0,0,0,0]
Array 2: [0,0,1,0,0,0,1,0,0,1,0,0]
Array 3: [1,0,0,0,0,0,0,0,0,0,0,0]
Което в този случай масив 3 трябва да бъде отговорът.
Въпреки това, използвайки текущия си алго (който ще дам по-късно), отговорът става масив 3. Ето какво използвам:
for (int i = 0; i < basearray.Length; i++)
{
temp = (basearray[i] - arrayX[i]);
dist += temp * temp;
}
И така, мисля, че нещо не е наред с моя алго? Или може би трябва да използвам „различен“ вид алгоритъм, а не разстояние (тъй като по същество .25 Е по-близо до 0 от 1, но това, което искам, е друго).
Благодаря!
АКТУАЛИЗАЦИЯ:
Намерих отговора! Благодаря на всички за помощта. Ето го:
float[] pbaseArrX = new float[3];
float[] pcompArrX = new float[3];
float dist1 = 0, dist2 = 0;
for (int i = 0; i < baseArrX.Count; i++)
{
pbaseArrX[i] = baseArrX[i] / (baseArrX[0] + baseArrX[1] + baseArrX[2]);
}
//Do the following for both compArr1 and compArr2;
for (int i = 0; i < compArrX.Count; i++)
{
pcompArrX[i] = pcompArrX[i] / (pcompArrX[0] + pcompArrX[1] + pcompArr[2]);
}
//Get distance for both
for (int i = 0; i < pcompArrX.Count; i++)
{
distX = distX + ((pcompArrX[i] - pbaseArrX[i])^2);
}
//Then just use conditional to determine which is 'closer'