数据结构和算法python语言描述
关于图的顶点分组和算法(交叉路红绿灯问题)
将红绿灯问题抽象成图数结构上的顶点分组,要求相邻顶点不能分在一起的原则,要求分组尽量少。用枚举法的组合数未顶点数的指数函数,代价过高
考虑一种简单的算法:贪婪算法。贪心算法是一种典型的算法设计思路,其中的基本先想法是更具当时掌握的信息,尽可能的向得到的解的方向前进,直到不能继续在换一个方向。这样可能不能找到最优解,但是能找到“可接受的”解。
算法的梗概如下:
输入:图1.3 # 记录途中的顶点连接关系
集合verts保存图中所有的顶点 # 建立初始状态
设置集合groups为空集 # 用于记录得到的分组,元素为顶点的集合
while存在未着色的顶点: # 每次迭代使用贪心算法找到一个新的分组
选一种新的颜色
在为着色的顶点找中尽可能多的无连线的点着色
记录新的着色的顶点组
& 算法的精化和python的描述
将上述的伪代码转化为python函数时,如何表示颜色,如何记录得到的分组,如何表示图结构?在书中使用顺序的整数表示颜色,用集合来表示分组。
从此可以得出总结:将具体的问题函数化,可以先将具体问题抽象化,使用简单的表示方法表示内在联系。具体的解决方法可以是直接求出正确的,在求不出正确解或者求正确的解代价太大时可以通过其他算法得到近似的解。这里用到贪婪法。
1.3 算法和算法分析
在考虑计算问题时,需要清晰的区分问题,问题实例和算法 三个概念,并理解三者