栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

字典火车路线的最佳数据结构?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

字典火车路线的最佳数据结构?

我会反驳说-直截了当的命令并不是最好的选择。

假设您有100个站点,并且有多条非字母和非数字的路线。想想巴黎地铁:

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

甲树或某种形式的图形是较好的结构。字典对于1对1映射而言是极好的。树对于相互关联的节点的丰富描述更好。然后,您将使用类似Dijkstra的算法的导航方式。

由于嵌套的dict或list的dict是一个图,因此很容易提出一个递归示例:

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, end, path)     for newpath in newpaths:         paths.append(newpath)        return pathsdef min_path(graph, start, end):    paths=find_all_paths(graph,start,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,j in zip(mpath,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,'A','D')    min_path(graph,'A','F')

印刷品:

    All paths: [['A', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'D', 'E']]        evaluating: ['A', 'C', 'D', 'E'] 25        evaluating: ['A', 'B', 'C', 'D', 'E'] 29        evaluating: ['A', 'B', 'D', 'E'] 24Best path: A->B:5 B->D:10 D->E:9   Total: 24    All paths: [['A', 'C', 'D'], ['A', 'B', 'C', 'D'], ['A', 'B', 'D']]        evaluating: ['A', 'C', 'D'] 16        evaluating: ['A', 'B', 'C', 'D'] 20        evaluating: ['A', 'B', 'D'] 15Best path: A->B:5 B->D:10   Total: 15    All paths: [['A', 'C', 'D', 'E', 'F'], ['A', 'B', 'C', 'D', 'E', 'F'], ['A', 'B', 'D', 'E', 'F']]        evaluating: ['A', 'C', 'D', 'E', 'F'] 33        evaluating: ['A', 'B', 'C', 'D', 'E', 'F'] 37        evaluating: ['A', 'B', 'D', 'E', 'F'] 32Best path: A->B:5 B->D:10 D->E:9 E->F:8   Total: 32


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/638862.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号