Questions tagged «dijkstra»

5
确定最快路线的算法?
假设我们要从1转到5。最短的路线将是1-4-3-5(总计:60公里)。 我们可以使用Dijkstra的算法来做到这一点。 现在的问题是,由于交通拥堵或其他因素,最短的路线不一定总是最快的路线。 例如: 1-2被认为经常发生交通拥堵,因此应避免这种情况。 突然在4-3发生车祸,因此也应该避免。 等等... 因此,由于没有交通阻塞/事故,我们大概可以在1-4-5号路线上加速行驶,因此速度会更快达到5。 好吧,这是总体思路,我还没有考虑更多细节。 有没有解决这个问题的算法?
17 graph  dijkstra 

1
关于Floyd-Warshall,Dijkstra和Bellman-Ford算法之间的区别,我是否正确?
我一直在研究这三个,并在下面说明了他们的推论。有人可以告诉我我是否足够正确地理解它们?谢谢。 Dijkstra的算法仅在您只有一个来源并且想知道从一个节点到另一个节点的最小路径时使用,但是在这种情况下会失败 当所有节点中的任何一个都可以作为源时,将使用Floyd-Warshall算法,因此您希望从任何源节点到任何目标节点的距离最短。仅在出现负循环时失败 (这是最重要的一个。我的意思是,这是我最不确定的一个:) 3,贝尔曼·福特(Bellman-Ford)和迪杰斯特拉(Dijkstra)一样,只有一个来源。它可以处理负数权重,其工作方式与Floyd-Warshall相同,只是有一个来源,对吗? 如果需要看一下,相应的算法是(由维基百科提供): 贝尔曼福特: procedure BellmanFord(list vertices, list edges, vertex source) // This implementation takes in a graph, represented as lists of vertices // and edges, and modifies the vertices so that their distance and // predecessor attributes store the shortest paths. // Step 1: initialize graph …

6
当Dijkstra写关于关注点分离的文章时,他是否打算进行代码模块化?
首先,我阅读了摘自Edsger W. Dijkstra 1974年的论文“关于科学思想的作用”: 让我尝试向您解释,我的品味是所有明智思维的特征。就是说,一个人出于自己的一致性而愿意独立地深入研究其主题的一个方面,一直都知道一个人只在其中一个方面中占据一席之地。我们知道一个程序必须是正确的,我们只能从那个角度研究它;我们也知道它应该是有效的,可以这么说,我们可以在另一天研究它的效率。在另一种情况下,我们可能会问自己,是否这样做:为什么,该程序是理想的。但是,通过同时处理这些各个方面,则无济于事!这就是我有时所说的“关注点分离”,即使不是完全可能,据我所知,这是有效地整理思想的唯一可用技术。这就是我所说的“将注意力集中在某个方面”的意思:这并不意味着忽略其他方面,这只是正视这个事实,即从该方面的观点来看,另一方面是无关紧要的。它同时是一轨和多轨。 我看到关注点的现代分离正在谈论将代码模块化。但是,阅读上面的引用后,我理解这是一次将您的注意力集中在一项特定的任务上,而不是将精力集中在其他方面。在我看来,这并不意味着必须将代码分成模块化的块。 也就是说,在您面前有一个代码,即在一个文件中的所有文件都包含视图,存储库,控制器,事件处理,工厂等概念。 作为一个简短的示例,下面是一些具有数据访问权限并查看(输出)的代码: $sql = "SELECT * FROM product WHERE id = " . db_input($id); $row = db_fetch_array(db_query($sql)); <option value="<?=$row['id']?>"<?= $row['ver'] == $row['ver'] ? ' selected="selected"' : '' ?>>Version <?=$row['ver']?></option> 使用现代的OO,我可以使用Repository模式将数据访问放在其自己的文件中,View代码可以进入其自己的文件模板,并且可以将它们连接在一起以通过控制器(或Action或Request Handler)进行通信,并且我可以添加一个工厂来创建和连接各种依赖项。我可以有一个定义这些工厂的配置文件。当然,这与单一文件的一切相去甚远。 我关于关注点分离的问题是这样的:阅读Dijkstra的报价,我有一个想法,即他不一定意味着关注点分离是“代码的模块化分离(到文件或它们自己的函数/方法/等)中”,而且他的意思还在于让人们将注意力集中在程序的某个方面,而不用专心于其他重要但目前尚未考虑的方面,而无论它们是否在代码中物理上分开。 那么为什么我们要负担物理模块化代码分离和设计模式呢?不管代码的结构如何,仅将精力集中在一个方面是否足够? 我不是在谈论编写最可怕的意大利面条代码,然后只考虑它的一个方面,这很可能是一种负担。但是最后,我要解决的是,当不需要在精神上专注于某个方面时,为什么要执行物理代码分离,为什么要将代码拆分为分离的文件或块(方法)? 关注点分离应该仍然是一种心理锻炼,而不是身体锻炼吗? 换句话说,编程的精神(专注)和物理(纸上代码)方面是否应该脱节?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.