Python 评估Dijkstra算法的复杂性

Python 评估Dijkstra算法的复杂性,python,big-o,complexity-theory,networkx,Python,Big O,Complexity Theory,Networkx,我试图通过创建基于循环和基于时间的bigo图来评估Dijkstra算法的python实现的复杂性 我从我的投标输入数据集了解到这一点,在我的案例中,这是一个CSV。文件有三行:city1,city2,distance,我必须随机选择一系列较小的数据集来运行我的算法 我如何随机选择,比如说:5行,然后10行,15行,20行?您可以使用random.sample。如果您有一个列表,那么您可以这样使用它: import random rows = [f'city1,city2,{i}\n' for i

我试图通过创建基于循环和基于时间的bigo图来评估Dijkstra算法的python实现的复杂性

我从我的投标输入数据集了解到这一点,在我的案例中,这是一个CSV。文件有三行:city1,city2,distance,我必须随机选择一系列较小的数据集来运行我的算法

我如何随机选择,比如说:5行,然后10行,15行,20行?

您可以使用random.sample。如果您有一个列表,那么您可以这样使用它:

import random
rows = [f'city1,city2,{i}\n' for i in range(5)] # equal to f.readlines()

sample_size = 5 # or whatever you need
samples = random.sample(rows, sample_size)

for sample in samples:
    city1, city2, distance = sample.strip().split(',')
    distance = int(distance) # distance is a string because of csv, convert it to a number
    # do your thing here

由于您已经从csv创建了一个图形,我很想直接从您的networkx图形中进行采样

import random    
import networkx as nx
city_graph = nx.complete_graph(20) # generate a sample complete graph to demonstrate on
all_cities = city_graph.nodes()    # a list of all the cities from your graph
sample_size = 5  # make sure this is less than total node-count
sample_population_node_list = random.sample(all_cities, sample_size)
connected_sample_graph = nx.subgraph(city_graph, sample_population_node_list)
该模块应随机提取节点名称,然后nx.subgraph将一个新的图缝合在一起,其中包含从原始图中带出的任何连接的节点采样。中提供了类似的采样功能,允许您指定是否要使用替换进行采样

如果原始图形不完整,您可能会发现某些组合会导致孤立的城市,即如果原始图形不是完整的图形,并且如果到达a的唯一方法是通过B,B不在样本中,而a是,则a将无法到达。可能值得在结果子图上运行,以查看它是否连接


此外,为了完整性,可能值得将您的最终代码与中的各种算法进行比较。

如果我使用上面的代码,我得到:['city1','city2',1','city1','city2',4','city1','city2',3','city1','city2',0','city1',city2',2]。相反,我想要城市1、城市2和距离的实际值。另外,如果我从city1、city2中删除引号并添加距离,而不是我,我得到的是同一行五次:例如,“NY”“LA”2500rows应该是您的输入文件,我只需要一些伪值。不管怎样,请看我更新的答案。您是如何将数据加载到python中的,您是否有这样加载数据的首选项?有很多选项,包括pandas、numpy等-如果您使用的是香草python,即没有特殊模块,可能是作为课程的一部分,那么您是想将整个部分加载到内存中,还是想直接从文件中提取?对您来说,在第二个随机样本上两次提取相同的数据是重要的,还是希望避免这种情况?您是否有任何代码可以共享,人们可以使用这些代码来帮助查看您迄今为止的尝试?尝试发布。我正在使用networkx加载它。我想加载整个图以便运行它,然后我想随机选择一系列子图,并测试算法的运行时间或循环数如何随着输入数据的大小而增加。