随笔分类 - Python
摘要:#!/usr/bin/env python3.3# -*- coding:utf-8 -*-# Copyright 2013'''最大流:沿增广路径反复增加流,直到找不到增广路径1)残留网络:Gf由可以容纳更多网络流的边所组成2)增广路径:为残留网络Gf上从s到t的一条简单路径p,其中p中所的边的最小权值为该增广路径的残留容量3)最大流最小割:对G的某个割(S,T),有|f|=c(S,T)'''def edmonds_karp(graph, graph_size, s, t): # 初始化所有边的流 flow = [[0] * graph_siz
阅读全文
posted @ 2013-04-30 01:36
Leung文
摘要:#!/usr/bin/env python3.3# -*- coding:utf-8 -*-# Copyright 2013'''单源最短路径:1)bellman_ford算法:将所有的边进行|V|-1次循环,每次循环对所有边进行松弛操作2)dijkstra算法:将V-S中顶点按最短路径递增的次序加入到S中,并对邻接边进行松弛操作'''def bellman_ford(graph, graph_size, s): low_weight = [w for w in graph[0]] low_weight[s] = 0 for repeat in
阅读全文
posted @ 2013-04-30 01:15
Leung文
摘要:#!/usr/bin/env python3.3# -*- coding:utf-8 -*-# Copyright 2013'''无向图最小生成树:1)kruskal算法:将所有的边按权值从小到大排序,顺序遍历把两个顶点不在同一个连通分量的边添加到最小生成树2)Prim算法:从单一顶点开始,逐条添加连接最小生成树与一个不在树中的顶点的最小权边'''def mst_kruskal(graph, graph_size): # 并查集 ufs = UnionFindSet() for v in range(graph_size): ufs.make_s
阅读全文
posted @ 2013-04-30 00:57
Leung文
摘要:#!/usr/bin/env python3.3# -*- coding:utf-8 -*-# Copyright 2013def topological_sort(graph, graph_size): topo_list = [] indegree = {v: 0 for v in range(graph_size)} # 初始化每个顶点的入度 for u in range(graph_size): for v in range(graph_size): if graph[u][v] is not None: ...
阅读全文
posted @ 2013-04-30 00:28
Leung文
摘要:#!/usr/bin/env python3.3# -*- coding:utf-8 -*-# Copyright 2013'''并查集1)合并两个不相交集合2)判断两个元素是否属于同一个集合'''class UnionFindSet: def __init__(self): self.root = {} self.rank = {} def make_set(self, x): self.root[x] = x self.rank[x] = 0 def find(self, x): root = ...
阅读全文
posted @ 2013-04-29 23:35
Leung文
摘要:#!/usr/bin/env python3.3# -*- coding:utf-8 -*-# Copyright 2013'''满足如下红黑性质的二叉查找树:1)节点是红色或黑色2)根是黑色3)所有叶子都是黑色(叶子是NIL节点)4)每个红色节点的两个子节点都是黑色(从每个叶子到根的所有路径上不能有两个连续的红色节点)5)从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点'''class Node: def __init__(self, key): self.key = key self.left = None self.right
阅读全文
posted @ 2013-03-31 16:21
Leung文
摘要:#!/usr/bin/env python3.3# -*- coding:utf-8 -*-# Copyright 2013'''对任何节点X1)其左子树中的关键字最大不大于key[X]2)其右子树中的关键字最小不小于key[X]'''class Node: def __init__(self, key): self.key = key self.left = None self.right = None self.parent = None def __str__(self): return str(self....
阅读全文
posted @ 2013-03-31 16:19
Leung文
摘要:1)查找第N小的值2)查找最小最大值#!/usr/bin/env python3.3# -*- coding:utf-8 -*-# Copyright 2013def randomized_select(data, n): if n > 0 and n 0: min_value = max_value = data[0] start_pos = 0 if len(data) % 2 == 0 else 1 for i in range(start_pos, len(data)-1, 2): if data[i] max_...
阅读全文
posted @ 2013-03-25 20:10
Leung文
摘要:tar -xzvf Python-3.3.tgzcd Python-3.3export LANG=zh_CN.UTF-8export LANGUAGE=zh_CN.UTF-8mkdir /usr/local/python3./configure --prefix=/usr/local/python3make allmake installmake cleanrm /usr/bin/pythonln -s /usr/local/python3/bin/python3 /usr/bin/python修复不能正常工作的Yum:打开Yum的配置文件/usr/bin/yum,将第一行修改为:!#/usr
阅读全文
posted @ 2013-03-24 17:24
Leung文
摘要:#!/usr/bin/env python3.3# -*- coding: utf-8 -*-# Copyright 2013from test import supportimport unittestimport randomimport sortclass SortTests(unittest.TestCase): def setUp(self): self.data = [random.randint(1, 10000) for i in range(10000)] def tearDown(self): self....
阅读全文
posted @ 2013-03-05 09:32
Leung文
摘要:1)冒泡排序:逐个比较相邻的两个元素并排序(稳定)2)选择排序:对于未排序数据,寻找最小元素放到已排序序列末尾(不稳定)3)插入排序:对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入(稳定)4)归并排序:使用分治法递归地将两个已排序序列合并成一个序列(稳定)5)快速排序:使用分治法递归地把小于基准值元素的子数列和大于基准值元素的子数列排序(原地分区版本不稳定)6)希尔排序:递减步长插入排序(将数组列在一个表中并对列进行插入排序,然后逐步减少步长到1)(不稳定)7)堆排序: 先创建最大堆,然后递归地移除根结点后做最大堆调整(不稳定)快速排序优化:1)使用原地分区减少额外存储空间..
阅读全文
posted @ 2013-03-02 22:24
Leung文

浙公网安备 33010602011771号