zoukankan      html  css  js  c++  java
  • 浅谈拓扑排序和元素间依赖性

    浅谈拓扑排序和元素间依赖性

    本篇随笔浅谈一下依赖关系问题和拓扑排序的关系。


    一、建图的概念和意义

    有的时候自己曾经问过自己一个问题:图论的意义是什么?就是考一堆板子么?为什么数学家们要绞尽脑汁YY出一堆图论算法和图论问题?为什么数学竞赛也要学图论?

    答案就是,图论这个东西真的和生活中的一些实际问题有关。

    或者说,生活中的很多实际问题可以抽象成”图“这种模型,从而把原问题转化成图上问题来求解。这就是我们求什么最短路、最小生成树之类问题的意义。

    所以我们发现,这些算法的精髓不是用这些算法解决图上问题,而是如何把实际问题抽象成这种模型。一旦这个模型构建对了,那么往上套算法就变成很简单的事情了。

    建模的过程,在图论中就叫建图。


    二、元素间关系和图

    就拿这个依赖性关系来说。放一波百度的定义:

    一个较大的工程往往被划分成许多子工程,我们把这些子工程称作活动(activity)。在整个工程中,有些子工程(活动)必须在其它有关子工程完成之后才能开始,也就是说,一个子工程的开始是以它的所有前序子工程的结束为先决条件的,但有些子工程没有先决条件,可以安排在任何时间开始。

    这种问题给人的感觉比较棘手,棘手的原因是元素之间的关系非常复杂。那么我们完全就可以把这种关系抽象成一种图上问题,然后用图论知识求解。对于这种依赖性关系,我们建一张有向图,箭头指向的是后续任务。

    说一句,这种表示活动间相互关系的图被称作: 顶点活动网(Activity On Vertex network),简称AOV网。


    三、依赖性关系和拓扑排序

    刚刚举出的元素间关系的例子其实就是一种依赖性关系。那么解决这种问题,重要的在于处理出一种合法完成工作的序列,使得其满足工作间的前后和依赖关系。

    那么,把这个问题抽象到AOV网上,就是:找到一个序列,使得对于每条有向边,出点都在入点之前。

    出现了!拓扑排序!

    这种问题就用拓扑排序来方便地求解。

  • 相关阅读:
    海量文件查重SimHash和Minhash
    刷题中熟悉Shell命令之Tenth Line和Transpose File [leetcode]
    C# 开发XML Web Service与Java开发WebService
    Sketchup+ArcGIS三维建模与管理
    入门-Arcmap网络分析示例
    建议入门-用ArcMap进行空间查询与空间连接
    (转载)Htmlparser Filter 简要归纳
    (转载)java常见的ClassNotFoundException
    C# WinForm程序向datagridview里添加数据
    oracle数据库的简单操作
  • 原文地址:https://www.cnblogs.com/fusiwei/p/13887411.html
Copyright © 2011-2022 走看看