算法设计与分析课程Part1笔记(3)

来源:互联网 发布:航班动态查询软件 编辑:程序博客网 时间:2024/05/14 22:04

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 j<i return Random_Selection(2nd 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的数目,但是不一定是最小的



原创粉丝点击