dijkstra
Dijkstra算法是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。Dijkstra算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。 问题:有N个节点,M条边,求某节点到另一节点的最短距离 输入:先输入N(从0开始)代表N个节点,M条边,随后跟随N行,p1p2d,最后输入起始点st和终点ed 输出:求最短距离 例: 算法描述: ① 初始化,将图edge数组以及距离数组dis所有值置为极大量,表示不可访问,标记数组置为false 算法最多需要更新N个点才能得到最短路径,每次遍历节点也需要查询N遍其他节点与该节点的关系,所以空间复杂度应该是O(n^2);我们使用了N*N邻接表储存边,所以空间复杂度是O(n^2) 邻接矩阵实现简单,但是浪费很多空间,在稀疏图中就更加严重了
哲学家就餐问题。这是由计算机科学家Dijkstra提出的经典死锁场景。原版的故事里有五个哲学家(不过我们写的程序可以有N个哲学家),这些哲学家们只做两件事--思考和吃饭,他们思考的时候不需要任何共享资源,但是吃饭的时候就必须使用餐具,而餐桌上的餐具是有限的,原版的故事里,餐具是叉子,吃饭的时候要用两把叉子把面条从碗里捞出来
你想娶酋长的女儿,但酋长要求你给一定数额金钱的聘礼。除了金钱外,酋长也允许你用部落里其他人的某物品加上一点钱作为聘礼。而其他人的物品也可以通过指定的另外一些人的某物品加上一些金钱获得
BFS(广度优先搜索):已知图G=(VE)和一个源顶点s,广度优先搜索以一种系统的方式探寻G的边,从而“发现”s所能到达的所有顶点,并计算s到所有这些顶点的距离(最少边数),该算法同时能生成一棵根为s且包括所有可达顶点的广度优先树。对从s可达的任意顶点v,宽度优先树中从s到v的路径对应于图G中从s到v的最短路径,即包含最小边数的路径。 DFS(深度优先搜索):深度优先算法是一种用于遍历图的算法
完全图:任何两个节点之间都有边。 连通图:任何两个节点之间都有路径。 深度优先搜索:节点优先级=父节点优先级-1,越深的节点优先级越小,越优先
这个算法是通过为每个顶点 v 保留目前为止所找到的从 s 到 v 的最短路径来工作的。若对于顶点 s 存在能直接到达的边(sm),则把 d[m]设为 w(s m)同时把所有其他(s 不能直接到达的)顶点的路径长度设为无穷大,即表示我们不知道任何通向这些顶点的路径(对于所有顶点的集合 V 中的任意顶点 v, 若 v 不为 s 和上述 m 之一, d[v] = ∞)。当算法结束时,d[v] 中存储的便是从 s 到 v 的最短路径,或者如果路径不存在的话是无穷大
算法描述 该算法维护了两个点集,S和V。其中S集合为已经确定到源点最短路径的点集,V集合为未确定到源点最短路径的点集。 循环进行以下操作直到所有点都确定了与源点的最短路径:从V集合中取出一点,使得该点到源点距离为V集合中最短
Mutex 与 Semaphore 都是用在保护 critical section,确保多个 process 平行运作并存取资源时,执行结果不会因为执行程序的时间先后的影响而导致错误。 Mutex 与 Semaphore 要解决的是不同的问题。了解这个部分后,就可以来区分 mutex 与 binary semaphore
你想娶酋长的女儿,但酋长要求你给一定数额金钱的聘礼。除了金钱外,酋长也允许你用部落里其他人的某物品加上一点钱作为聘礼。而其他人的物品也可以通过指定的另外一些人的某物品加上一些金钱获得
你想娶酋长的女儿,但酋长要求你给一定数额金钱的聘礼。除了金钱外,酋长也允许你用部落里其他人的某物品加上一点钱作为聘礼。而其他人的物品也可以通过指定的另外一些人的某物品加上一些金钱获得