zoukankan      html  css  js  c++  java
  • 通用汇点

    出自算法导论练习22.1-6
    通用汇点universal sink是指入度为|v|-1,出度为0的结点.

    多数以邻接矩阵为输入的图算法的运行时间为$$Omega(V^2)$$,但也有例外.
    其中,判断是否存在通用汇点就是这样一种算法,只需要$$O(V)$$时间.

    我们从经验出发,上升到理论.

    有这样一个矩阵存在通用汇点,这个矩阵突出了通用汇点的特性,没有细枝末节的冗余细节.

    [left( egin{matrix} 0&0&0&1&0\ 0&0&0&1&0\ 0&0&0&1&0\ 0&0&0&0&0\ 0&0&0&1&0 end{matrix} ight) ag{1} ]

    我们把((1))矩阵的特征再次突出,可以得到:

    [left( egin{matrix} &&&1&\ &&&1&\ &&&1&\ 0&0&0&0&0\ &&&1& end{matrix} ight) ag{2} ]

    可以进行一个感性的认知,即
    沿着1与0的路线,让一个指向(x,y)的坐标"滑"到((2))的"出口"

    这个认知是对的.
    对于((2))我们从(p=(1,1))出发,遇到1就将行数加1,遇到0就将列数加1,可以最终达到((4,5)),于是便验证了universal sink存在.

    对于所有存在(universal-sink = k)的矩阵,(p)经过这个过程都会在(e=(k,|V|))处停下.
    而这个过程只需要(O(|V|))

    但是,题目是判断存在,因此还要考虑不存在的情况.
    如果universal sink不存在,判断的方式很简单,只要对(e)进行一次(O(|V|))的判断即可.

  • 相关阅读:
    eclipse如何正确部署tomcat7
    调用awk的三种方式
    jupyter的简单操作
    编程语言简介
    2019.9.6作业
    计算机的基本组成
    9.2作业
    CPP 栈 示例
    关于使用栈将一般运算式翻译为后缀表达式并实现三级运算的方法及实例(cpp版)
    深度遍历破解数独游戏
  • 原文地址:https://www.cnblogs.com/Chuckqgz/p/7170785.html
Copyright © 2011-2022 走看看