拓扑排序应用

来源:互联网 发布:好家长软件 编辑:程序博客网 时间:2024/05/21 02:33


1.这次实际项目中碰到的问题可以归纳为控件联动选择,即常见的省份,城市,地区联动。为了实现通用的下拉连dog,设计了一套表结构,最终保存数据如下。

     

     看到这里也许你不明白这个和拓扑排序能扯上什么关系,假如省份下拉又依赖于地区下拉,那这样就会形成一个死循环。为了避免这样的情况需要在数据保存时,校验是否存在闭环。

 下面给出,解决上述问题的两种算法。

      1.递归判断

     步骤如下

      (1)找当前节点的父级节点(也可以叫依赖的节点)  

  (2)父级节点不为为空且不等于当前节点自己,则寻找父级节点对应的父级节点

      (3)重复1,2。最终找到的节点=自己 ,则存在闭环,否则不存在


2.一个软件安装很多依赖项,去掉重复依赖项,获取这些依赖项正确的安装方式


3. 采自知乎:
链接:https://www.zhihu.com/question/39748146/answer/82911221
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

举一个语音识别里的例子。

很多语音识别系统在识别一句话时,是要把整句话处理两遍的。
第一遍为了解码速度快,采用一个比较弱的语言模型,得到的结果是一个含有许多候选句子的lattice,就像这样:
<img src="https://pic1.zhimg.com/50/89728ee21ff27bb53d2707eab6f609e0_hd.jpg" data-rawwidth="487" data-rawheight="179" class="origin_image zh-lightbox-thumb" width="487" data-original="https://pic1.zhimg.com/89728ee21ff27bb53d2707eab6f609e0_r.jpg">第二遍再采用一个比较强的语言模型,从lattice中选出可能性最高的一条路径。

第二遍再采用一个比较强的语言模型,从lattice中选出可能性最高的一条路径。
这里的“可能性”用语音模型和语言模型的联合概率来衡量,每个单词本身有语音模型概率,单词到单词的转移有语言模型概率。

这是一个动态规划问题,lattice中的每个单词(即每条边)是一个状态。
在求解的过程中,计算一个状态的概率值时,需要知道它的所有前导状态的概率值。
为此,各个状态就必须按一定的顺序来处理,这个顺序就是拓扑顺序

事实上,许多在图上的动态规划问题,都需要按拓扑顺序依次处理每个状态,因此拓扑排序是一个必要的预处理步骤。

知乎网址:
https://www.zhihu.com/question/39748146/answer/82938218

原创粉丝点击