07 2014 档案
摘要:一个无向图G的最小生成树就是由该图的那些连接了G的所有顶点的边构成的树,且其总权重最低。最小生成树存在当且仅当G是连通的。对于任何一生成树T,如果将一条不属于T的边e加进来,则产生一个圈。如果从圈中除去任意一条边,则又恢复树的特性。如果边e的权值比除去的边的值低,那么新生成的树的值就比原生成的树的值...
阅读全文
摘要:python中执行obj.attr时,将调用特殊方法obj.__getattribute__('attr'),该方法执行搜索来查找该属性,通常涉及检查特性、查找实例字典、查找类字典以及搜索基类。如果搜索过程失败,最终会尝试调用类的__getattr__()方法。如果这也失败,则抛出Attribute...
阅读全文
摘要:python内置的描述符python有些内置的描述符对象,property、staticmethod、classmethod,python实现如下:class Property(object): def __init__(self,getf,setf,delf,doc): sel...
阅读全文
摘要:Python 描述符是一种创建托管属性的方法。每当一个属性被查询时,一个动作就会发生。这个动作默认是get,set或者delete。不过,有时候某个应用可能会有更多的需求,需要你设计一些更复杂的动作。最好的解决方案就是编写一个执行符合需求的动作的函数,然后指定它在属性被访问时运行。一个具有这种功能的...
阅读全文
摘要:通常,访问类和实例属性的时候,将返回所存储的相关值,也就是直接和类(实例的)的__dict__打交道。若果要规范这些访问和设值方式的话,一种方法是数据描述符,另一种就是python内置的数据描述符协议函数Property()。property是一种特殊的值,访问它时会计算它的值。特性的原型函数是pr...
阅读全文
摘要:with语句支持在一个叫上下文管理器的对象的控制下执行一系列语句,语法大概如下:with context as var: statements其中的context必须是个上下文管理器,它实现了两个方法__enter__,__exit__。1.需求是怎么产生的在正常的管理各种系统资源(文件、锁定...
阅读全文
摘要:myfunc=wrapper(myfunc)是一种很常见的修改其它函数的方法。从python2.4开始,可以在定义myfunc的def语句之前写@wrapper。 这些封装函数就被称为装饰器Decorator,其主要用途是包装另一个函数或类。这种包装的首要目的是透明的修改或增强被包装对象的行为。 1
阅读全文
摘要:Dijkstra算法解决了有向图G=(V,E)上带权的单源最短路径问题,但要求所有边的权值非负。Dijkstra算法是贪婪算法的一个很好的例子。设置一顶点集合S,从源点s到集合中的顶点的最终最短路径的权值均已确定。算法反复选择具有最短路径估计的顶点u,并将u加入到S中,对u的所有出边进行松弛。如果可...
阅读全文
摘要:有一个无权的图G,使用某个顶点s作为输入参数,找出从s到其它顶点的最短路径。这样,只要计算包含在路径中的边数就可以了。比如,一个word ladder problem,一次只变换一个字母,找出从fool到sage的最短路径。可用的单词可以转化为一个图:首先寻找与fool距离为1的顶点:然后可以寻找距...
阅读全文
摘要:拓扑排序是对有向无圈图的顶点的一种排序。如果存在一条vi到vj的路径,则vi排在vj前面。如果图含有圈,则拓扑排序是不可能的。拓扑排序的两种排法:一个简单的求拓扑排序的算法是先找出任意一个没有入边的顶点,然后显示出该顶点,并将它和它的边一起从图中删除,对图的其余部分应用同样的方法。首先,对于每个顶点...
阅读全文
摘要:一个图(graph)G=(V,E)是由顶点集V和边集E组成。每一条边就是一个顶点对(v,w),其中v,w∈V。如果点对是有序的,那么图就是有向图。图中的一条路径path是一个顶点序列w1,w2,w3,...,wk,使得(wi,wi+1)∈E,1<=i<=k。路径的长是该路径上的边数。 如果在一个无...
阅读全文
摘要:不相交集合数据结构保持一组不相交的动态集合S={S1,S2,...,SK},每个集合通过一个代表来识别,代表即集合中的某个成员。如果x表示一个对象,不相交集合支持以下操作:MAKE-SET(x):建立一个新的集合,其唯一成员为x。因为各集合是不想交的,故x没有在其它集合中出现。UNION(x,y):...
阅读全文