数据结构和算法python语言描述——红绿灯问题自我总结

数据结构和算法python语言描述

关于图的顶点分组和算法(交叉路红绿灯问题)
将红绿灯问题抽象成图数结构上的顶点分组,要求相邻顶点不能分在一起的原则,要求分组尽量少。用枚举法的组合数未顶点数的指数函数,代价过高
考虑一种简单的算法:贪婪算法。贪心算法是一种典型的算法设计思路,其中的基本先想法是更具当时掌握的信息,尽可能的向得到的解的方向前进,直到不能继续在换一个方向。这样可能不能找到最优解,但是能找到“可接受的”解。

数据结构和算法python语言描述——红绿灯问题自我总结_第1张图片

数据结构和算法python语言描述——红绿灯问题自我总结_第2张图片
算法的梗概如下:
输入:图1.3 # 记录途中的顶点连接关系
集合verts保存图中所有的顶点 # 建立初始状态
设置集合groups为空集 # 用于记录得到的分组,元素为顶点的集合
while存在未着色的顶点: # 每次迭代使用贪心算法找到一个新的分组
选一种新的颜色
在为着色的顶点找中尽可能多的无连线的点着色
记录新的着色的顶点组

& 算法的精化和python的描述
将上述的伪代码转化为python函数时,如何表示颜色,如何记录得到的分组,如何表示图结构?在书中使用顺序的整数表示颜色,用集合来表示分组。
从此可以得出总结:将具体的问题函数化,可以先将具体问题抽象化,使用简单的表示方法表示内在联系。具体的解决方法可以是直接求出正确的,在求不出正确解或者求正确的解代价太大时可以通过其他算法得到近似的解。这里用到贪婪法。
1.3 算法和算法分析
在考虑计算问题时,需要清晰的区分问题,问题实例和算法 三个概念,并理解三者之间的关系

常见算法模式包括:
枚举法:根据具体原因枚举出每一种可能。
贪心法:尽可能做出一部分有效解。
分治法:把复杂的问题分解为相对简单的子问题,分别求解,最后通过组合起的子问题的解的方式得到原问题的解。
回溯法:指通过探索的方式求解。如果问题复杂,没有清晰的求解路径,就需要分步骤进行,而每一步又有可能有多重可能。在这种情况下,只能采用试探的方式,根据实际情况选择一个可能方向。当后面的求解步骤不能继续时,就需要退回带前面的步骤,另行选择求解路径,这种动作就是回溯。
动态规划法:在一些复杂情况下,问题求解很难直接进行,因此需要在前面的步骤中积累信息,在后续步骤中根据已知信息,动态选择已知的最好求解路径。
分支限界法:可以看做搜索方法的一种改良形式。如果在搜索过程中得到一些信息,确定某些可能在选择上实际是不可能存在,就尽早避免,以缩小求解空间,加速问题求解过程。

你可能感兴趣的:(数据结构和算法python语言描述——红绿灯问题自我总结)