Ich versuche, eine Version von Dijkstra-Algorithmus zu implementieren, um die kürzeste Route für einen Bus von Anfang bis Ende zu finden. Unglücklicherweise kann ich keine Bibliothek oder eine andere Art finden, wie swift eine Art Prioritätswarteschlange bereitstellt, so dass es so aussieht, als müsste ich meine eigene schreiben.Priority Queue in swift
Dies gesagt, kann mir jemand in die richtige Richtung zeigen, dies zu tun?
Derzeit mein Denken ist wie folgt:
eine Klasse schreiben, die die Priorität Array halten wird. In dieser Klasse gibt es eine Methode, die einen Wert erhält, ihn dem Priority-Array hinzufügt und ihn dann nach Priorität sortiert (in diesem Fall die Entfernung). Es wird auch eine get-Funktion geben, die das höchstpriore Element aus dem Array zurückgibt.
Ich würde gerne wissen, ob ich nah oder noch weit weg in meinem Verständnis einer Prioritätswarteschlange bin.
Vielen Dank.
EDIT:
Dies ist mein Code so weit. Scheint zu kurz und brutal ... Ich muss etwas in Bezug auf das Konzept vermissen.
var priorityQueue = Dictionary<String, Int>()
var firstElement: String = ""
func push(name: String, distance: Int)
{
priorityQueue[name] = distance
var myArr = Array(priorityQueue.keys)
var sortedKeys = sort(myArr) {
var obj1 = self.priorityQueue[$0] // get obj associated w/ key 1
var obj2 = self.priorityQueue[$1] // get obj associated w/ key 2
return obj1 > obj2
}
firstElement = myArr[0]
var tempPriorityQueue = Dictionary<String, Int>()
for val in myArr
{
tempPriorityQueue[val] = priorityQueue[val]
}
priorityQueue = tempPriorityQueue
}
func pop() -> String
{
priorityQueue.removeValueForKey(firstElement)
}
Das ist in etwa richtig. Die Methode nimmt einen Wert und einen Prioritätsschlüssel als Argumente auf.Es wird finden, wo in der internen Datenstruktur, die die Paare hält, es basierend auf dem Prioritätsschlüssel platziert wird. Jetzt überlegen Sie, wie Sie diese Datenstruktur einrichten würden. Sie benötigen eine Datenstruktur, die einfach in der Mitte hinzugefügt werden kann, leicht zu entfernen ist und leicht an den Anfang von zu gelangen ist. Sie müssen nicht unbedingt etwas sortieren, wenn Sie herausfinden können, wo Sie die Paare einfügen sollen (sie sortiert sich). –
Schreibe etwas Code und poste ihn für mehr hilfreiches Feedback. Es gibt auch eine Fülle von Ressourcen hier und online, die Implementierungsdetails haben. –
mögliche Duplikate von [Dijkstra-Algorithmus mit Prioritätswarteschlange] (http://stackoverflow.com/questions/14959634/dijkstras-algorithm-with-priority-queue) – kurast