图解算法(七)

狄克斯特拉算法

 广度优先搜索,它找出的是段数最少的路径。如果要给每一段加上时间(加权),为了找到最快的路径,可使用狄克斯特拉算法。

1.使用狄克斯特拉算法

  1. 找出最便宜的节点,即可在最短时间内前往的节点
  2. 对于该节点邻居,检查是否有前往它们的更短路径,如果有,就更新其开销
  3. 重复这个过程,知道对图中的每个节点都这样做了
  4. 计算最终路径

2.实现算法

graph = {}
graph["start"] = {}
graph["start"]["a"] = 6
graph["start"]["b"] = 2
print graph["start"].keys()
print graph["start"]["a"]
graph["a"] = {}
graph["a"]["fin"] = 1

graph["b"] = {}
graph["b"]["a"] = 3
graph["b"]["fin"] = 5
graph["fin"] = {}

infinity = float("inf")
costs = {}
costs["a"] = 6
costs["b"] = 2
costs["fin"] = infinity

parents = {}
parents["a"] = "start"
parents["b"] = "start"
parents["fin"] = None

def find_lowest_cost_node(costs):
    lowest_cost = float("inf")
    lowest_cost_node = None
    for node in costs:
        cost = costs[node]
        if cost < lowest_cost and node not in processed:
           lowest_cost = cost
           lowest_cost_node = node
    return lowest_cost_node
processed = []

node = find_lowest_cost_node(costs)
while node is not None:
   cost = costs[node]
   neighbors = graph[node]
   for n in neighbors.keys():
      new_cost = cost + neighbors[n]
      if costs[n] > new_cost:
          costs[n] = new_cost
          parents[n] =  node
   processed.append(node)
   node = find_lowest_cost_node(costs)

3.小结

  • 广度优先搜索用于非加权图中查找最短路径
  • 狄克斯特拉算法用于在加权图中查找最短路径
  • 仅当权重为正时狄克斯特拉算法才管用

 

        

 

转载于:https://www.cnblogs.com/winddogg/p/10825054.html

图解算法是一本以简洁、清晰的图示和文字说明来解释算法的教材,它能帮助读者更加直观地理解复杂的算法原理和实现过程。在Java网盘下载的情境下,我们可以利用图解算法来解释下载文件的过程。 首先,我们需要明确网盘下载的基本原理。当用户需要下载文件时,需要向网盘服务器发送下载请求,服务器会对请求进行处理,并将文件以数据包的形式发送到用户的电脑上。为了更好地理解这个过程,我们可以利用图解算法中的图示来展示这个交互过程,包括从发送下载请求,服务器处理请求,到文件传输的过程。 其次,我们可以通过图解算法来解释下载算法的具体实现。比如,我们可以利用图示来展示使用Java编程语言实现下载算法的代码结构和逻辑。例如,图解算法可以用来展示如何利用Java的网络编程库来发送下载请求,如何处理服务器返回的数据包,并在用户的电脑上保存文件的过程。 最后,我们可以利用图解算法来说明下载算法的性能和优化。通过图示展示算法的时间复杂度、空间复杂度和效率,让读者更好地理解算法的性能表现和如何进行性能优化。例如,可以通过图解算法来展示如何利用多线程并行下载来提升下载速度,或者如何在内存中进行缓存来减少网络数据传输的次数。 总之,图解算法可以帮助我们更加直观、深入地理解Java网盘下载的原理、实现和优化。通过图解算法的方式,读者可以更轻松地掌握这一复杂的技术,并且能够更好地运用到实际的开发中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值