Swift   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了algorithm – swift中的优先级队列大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我正在尝试实现Dijkstra算法的一个版本,以找到总线从开始到结束的最短路径.不幸的是,我似乎无法找到一个库或 swift提供一种优先级队列的其他方式,因此我似乎必须编写自己的代码. 话这么说,有人能指出我正确的方向吗? 目前我的想法如下: 写一个将保存优先级数组的类.在这个类中,将有一个接收值的方法,将其添加到优先级数组,然后根据优先级(在这种情况下,距离)对其进行排序.还将有一个get函数
我正在尝试实现Dijkstra算法的一个版本,以找到总线从开始到结束的最短路径.不幸的是,我似乎无法找到一个库或 swift提供一种优先级队列的其他方式,因此我似乎必须编写自己的代码.

这么说,有人能指出我正确的方向吗?

目前我的想法如下:

一个将保存优先级数组的类.在这个类中,将有一个接收值的方法,将其添加到优先级数组,然后根据优先级(在这种情况下,距离)对其进行排序.还将有一个get函数,它返回数组中最高优先级的项.

我想知道在理解优先级队列时我是否接近或离开了.

谢谢.

编辑:

到目前为止这是我的代码.似乎太短暂和残酷……我必须在概念方面遗漏一些东西.

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)
}

解决方法

看看“heapsort”的代码. Heapsort创建一个“堆”,它基本上是一个具有最大元素的优先级队列,然后它重复弹出heap = priority队列的最大元素,将其移动到数组的末尾,并将前一个数组元素添加到优先队列.

插入和删除优先级队列中的项必须是O(log n)操作.这是优先队列的重点.在向优先级队列添加元素时调用“排序”是绝对荒谬的,并且会完全扼杀您的性能.

大佬总结

以上是大佬教程为你收集整理的algorithm – swift中的优先级队列全部内容,希望文章能够帮你解决algorithm – swift中的优先级队列所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。