加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 列车路线的最佳数据结构?

发布时间:2020-12-20 12:29:59 所属栏目:Python 来源:网络整理
导读:所以我的任务基本上是读取一个文件(记事本文件),该文件有一堆列车停靠点以及从一站到另一站的时间.例如,它看起来像: Stop A 15Stop B 12Stop C 9 现在我需要返回并访问这些站点及其时间.我正在考虑阅读文件并将其存储为字典.我的问题是,字典是否最适合这个
所以我的任务基本上是读取一个文件(记事本文件),该文件有一堆列车停靠点以及从一站到另一站的时间.例如,它看起来像:

Stop A     15
Stop B     12
Stop C     9

现在我需要返回并访问这些站点及其时间.我正在考虑阅读文件并将其存储为字典.我的问题是,字典是否最适合这个?或者是否有一些其他python工具会更有用?任何想法将不胜感激!

解决方法

我会反对这种说法 – 并说直言不讳是不是最好的.

假设您有100个停靠点和多个非字母和非数字路线.想想巴黎地铁:

现在尝试使用直接的Python dict来计算FDR和La Fourche之间的时间?这涉及两个或更多不同的路线和多个选项.

tree或某种形式的graph是更好的结构.对于1对1的映射,dict非常棒;树对于彼此相关的节点的丰富描述更好.然后,您将使用类似Dijkstra’s Algorithm的东西进行导航.

由于nested dict of dicts or dict of lists是一个图表,很容易想出一个递归的例子:

def find_all_paths(graph,start,end,path=[]):
        path = path + [start]
        if start == end:
            return [path]
        if start not in graph:
            return []
        paths = []
        for node in graph[start]:
            if node not in path:
                newpaths = find_all_paths(graph,node,path)
                for newpath in newpaths:
                    paths.append(newpath)
        return paths       

def min_path(graph,end):
    paths=find_all_paths(graph,end)
    mt=10**99
    mpath=[]
    print 'tAll paths:',paths
    for path in paths:
        t=sum(graph[i][j] for i,j in zip(path,path[1::]))
        print 'ttevaluating:',path,t
        if t<mt: 
            mt=t
            mpath=path

    e1=' '.join('{}->{}:{}'.format(i,j,graph[i][j]) for i,j in zip(mpath,mpath[1::]))
    e2=str(sum(graph[i][j] for i,mpath[1::])))
    print 'Best path: '+e1+'   Total: '+e2+'n'  

if __name__ == "__main__":
    graph = {'A': {'B':5,'C':4},'B': {'C':3,'D':10},'C': {'D':12},'D': {'C':5,'E':9},'E': {'F':8},'F': {'C':7}}
    min_path(graph,'A','E')
    min_path(graph,'D')
    min_path(graph,'F')

打印:

All paths: [['A','C','D','E'],['A','B','E']]
        evaluating: ['A','E'] 25
        evaluating: ['A','E'] 29
        evaluating: ['A','E'] 24
Best path: A->B:5 B->D:10 D->E:9   Total: 24

    All paths: [['A','D'],'D']]
        evaluating: ['A','D'] 16
        evaluating: ['A','D'] 20
        evaluating: ['A','D'] 15
Best path: A->B:5 B->D:10   Total: 15

    All paths: [['A','E','F'],'F']]
        evaluating: ['A','F'] 33
        evaluating: ['A','F'] 37
        evaluating: ['A','F'] 32
Best path: A->B:5 B->D:10 D->E:9 E->F:8   Total: 32

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读