作者:郭彦伶克瑞雅书 | 来源:互联网 | 2023-07-18 17:00
3. 线性时间下的选择问题和图基本
3.1 线性时间下的选择
问题描述:对于包含n个元素的数字A,找出其中的第i小(或者大)的元素(例如n为奇数时,i=(n+1)/2;n为偶数时,i=n/2)。
Random_Selection(array A, length n, oder i):
-- if n=1 return A[1]
--choose pivot p from A (choose randomly)
--partition A round P, let j= new index of p
--ifj==i return p
--if j>i return Random_Selction(1st part, j-1,i)
--if jnd part, n-j, i-j)
3.2 算法分析
3.3 图的基本
图简单来说是有点和边构成,通常用G表示,G=(V, E),其中V是顶点集合,E是边集合。一般用n代表G的节点数目,m代表G的边数。
图的割集指的是:将图的顶点分为两个非空集合A和B,那么对于端点分别在A和B中即连接两个断点集合的边数为c,A和B可以称为图G的一个割集。
其中使得c最小的割集,为G的最小割(minimumcut)。一个包含n个节点的图G其割集有2n个。
图的两种基本表示:邻接矩阵和链接表,一个方便随机存取,一个节省空间,对于sparse的图(即图密度m/n比较小)来说,链接表虽然不利于随机存取,但是很节省空间。
3.4 最小割问题
Random_Construction_Algorithm(Karger, early 90s):
-- while there more than 2 vertices:
--pick a remaining edge (u,v) uniformly at random
--merge u and v into a single vertex
--remove self-loops
最后只剩下了两个顶点,两个顶点之间的边数c是一个割集的cross edges的数目,但是不一定是最小的。