2016-11-14 22 views
1

So habe ich jetzt das Folgende, das mich den kürzesten/nächsten Nachbarn findet, indem ich den kleinsten Entfernungswert von meinem "Abstand" -Array mit den berechneten Entfernungen nehme. Dann macht es eine andere Suche, um seinen Index aufzuspüren, der mir dann anzeigt, zu welchem ​​Patienten es gehört.Die kürzesten 'K'-Abstände im K-nächsten Algorithmus (Java)

Aber sagen, ich wollte die 3 nächsten Nachbarn finden, wie würde ich das tun? Muss ich meinen Code vollständig ändern, um dies zu berücksichtigen?

Vielen Dank

int min = 99; 
    int d = 1; 
    String diagnosis; 
     //Finding smallest value from an array containing distance to new 'patient' 
     for(d=1; d<= numberOFinstances; d++){ 
      if(distance[d] < min) 
      min = distance[d]; 
     } 

     for (int p = 1; p < numberOFinstances; p++) 
     { 
     if (distance[p] == min){ 
      System.out.println("Nearest patient to new patient is Patient "+p+ " with a distance of: " + min); 
      //Here I'm saying 6 because the diagnosis is in column 6 within the matrix 
      diagnosis = data[p][6]; 
      System.out.println("The new patient's diagnosis is: " + diagnosis); 
     } 
     } 
+0

Das erste Element eines Array-Element [0]. Sie sollten sich daran gewöhnen. – ControlAltDel

+0

Wie wäre es mit "Entfernung" sortieren und die ersten drei Elemente verwenden? Vielleicht ein Code zum Umgang mit Bindungen, wenn zum Beispiel die ersten vier Elemente den gleichen Abstand haben. –

+0

@ControlAltDel, danke für Ihre Eingabe. Ich fange von 1 an, weil meine CSV-Datei Header in der Zeile 0 hat. – AnthonyJ

Antwort

0

Bester Weg wäre, zu erreichen Arrays.sort zu verwenden (int [])

Arrays.sort(distance); 
int[] toReturn = new int[k]; 
for (int i = 0; i < k; i++) { 
    toReturn[i] = distance[i]; 
} 
+0

Danke, das verstehe ich. Wenn ich die 3 kleinsten Abstände erhalte, wie kann ich sie dann zu ihrer ursprünglichen Indexposition zurückverfolgen? Vermutlich befindet sich das Array nicht mehr in der gleichen Reihenfolge nach der Sortierung. Vielen Dank – AnthonyJ

+0

Es klingt, als ob Sie zwei unterschiedliche, aber korrelierte Arrays haben - eines für Patienten und eines für die Entfernung. Sie müssen eine Klasse erstellen, um die Beziehung zwischen einer Entfernung und einem Patienten zu halten. Füllen und sortieren Sie das Array "PateintDistance" im Entfernungsattribut, das Ihnen den zugehörigen Patienten anzeigt. –

+0

@AnthonyJ Der beste Weg wäre für Sie, eine 'Klasse' zu ​​erstellen, die den Abstand und den Index enthält und' Comparable' implementiert – ControlAltDel

Verwandte Themen