public delegate double Metryka(Obiekt x, Obiekt y); public static double Klasyfikacja(List OB, Obiekt nowy, int metr, int knn){ List KeyList = new List(); Dictionary dictionary = new Dictionary(); foreach (Obiekt POB in OB){ if (KeyList.IndexOf(POB.klasa) == -1) KeyList.Add(POB.klasa); } Metryka metryka = new Metryka(Metryki.Logarytmiczna); if(metr == 1) metryka = new Metryka(Metryki.Logarytmiczna); if (metr == 2) metryka = new Metryka(Metryki.Manhattan); if (metr == 3) metryka = new Metryka(Metryki.Czybyczewa); double wynik = 0; double value = -1; foreach (double key in KeyList) { double tmp = 0; List doubleList = new List(); foreach (Obiekt x in OB) { if (x.klasa == key && x != nowy) doubleList.Add(metryka(x, nowy)); } doubleList.Sort(); for (int index = 0; index < knn; ++index) tmp += doubleList[index]; dictionary.Add(key, tmp); } foreach (KeyValuePair keyValuePair in dictionary) { double tmp = -1; if (value == -1) { value = keyValuePair.Value; wynik = keyValuePair.Key; } else if (keyValuePair.Value == value) tmp = 1; else if (keyValuePair.Value < value) { value = keyValuePair.Value; wynik = keyValuePair.Key; tmp = -1; } } return wynik;