运筹学——图论与最短距离(Python实现)(2),2024年最新Python高级面试framework

适用于wij≥0,给出了从vs到任意一个点vj的最短路。

Dijkstra算法是在1959年提出来的。目前公认,在所有的权wij ≥0时,这个算法是寻求最短路问题最好的算法。并且,这个算法实际上也给出了寻求从一个始定点vs到任意一个点vj的最短路。

2 案例1——贪心算法实现

==============

2.1 旅行商问题(TSP)


**旅行商问题(TravelingSalesmanProblem,TSP)**一个商品推销员要去若干个城市推销商品,该推销员从一个城市出发,需要遍历所有城市一次且只能一次,回到出发地。应如何选择行进路线,以使总的行程最短。

旅行商问题(TSP)即给定一组城市以及每对城市之间的距离,需要找到一条最短的路线,该路线只对每个城市进行一次访问并返回起点。

这里注意汉密尔顿活路(Hamiltonian Cycle)和TSP之间的区别。汉密尔顿回路问题是要找出是否存在一次游览每个城市一次的路线。在TSP问题中,我们是已知存在汉密尔顿回路(因为该图是完整的),并且实际上,存在许多此类回路,TSP问题在于找到最小权重的汉密尔顿回路。

运筹学——图论与最短距离(Python实现)(2),2024年最新Python高级面试framework_第1张图片

目前解决TSP问题的方法有许多种,比如:贪心算法、动态规划算法、分支限界法;也有智能算法。本文先介绍贪心算法

2.2 案例


数据 如下图,第一列城市名。第二列坐标x,第三列坐标y:

贪心算法思路:随便选择出发城市,然后每次选择要去的下一个城市时,都选择还没去的最近的城市。

运筹学——图论与最短距离(Python实现)(2),2024年最新Python高级面试framework_第2张图片

2.3 Python实现


#第一步:导入相关库==========

import pandas as pd

import numpy as np

import math

import time

#第二步:读取数据===========

dataframe = pd.read_csv(“旅行商问题.csv”, sep=“,”, header=None)

v = dataframe.iloc[:, 1:3] #去除第一列12345678910,只保留x,y

print(‘读取数据:----------------------------’)

print(v)

#=第三步:计算城市之间的距离==

train_v= np.array(v)

train_d=train_v

dist = np.zeros((train_v.shape[0],train_d.shape[0])) #初始化距离 为10*10的全0矩阵

print(dist.shape) #(10,10)

#计算距离矩阵=

for i in range(train_v.shape[0]):

for j in range(train_d.shape[0]):

dist[i,j] = math.sqrt(np.sum((train_v[i,:]-train_d[j

你可能感兴趣的:(2024年程序员学习,图论,python,面试)