ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

链式前向星图存储优化

2021-05-20 21:33:37  阅读:176  来源: 互联网

标签:pr 星图 下标 前向 数组 链式 集合 last 前向星


1.前向星存储

前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序,
并记录下以某个点为起点的所有边在数组中的起始位置和存储长度,那么前向星就构造好了.

比如有起点终点和权值为以下的边:

1 2 1 // 1->2 权值为1

2 3 2

3 4 3

1 3 4

4 1 5

1 5 6

4 5 7

重新排列以后就为:

1 2 1

1 3 4

1 5 6 // 以1为开头的集合

2 3 2 // 以2为开头的集合

3 4 3 // 以3为开头的集合

4 1 5

4 5 7 // 以4为开头的集合

由于排序需要nlogn时间,有些慢,可以优化为不需要排序的链式前向星

2.链式前向星

不排序我们就要对顺序做一个记录 :

开辟一个last数组来保存以 i 开头集合最后一个元素的下标idx

举个例子 :

1 2 1 // 1->2 权值为1 ,下标为1

2 3 2 // 下标为2

3 4 3 // 下标为3

1 3 4 // 4

4 1 5 // 5

1 5 6 // 6

4 5 7 // 7

上叙边中,以 1 开头集合最后一个边的下标为 6 (1 5 6 ) ,last[1] = 6;

为了便于后续遍历,last数组初始值赋值为-1

然后在边的存储设计中(结构体构造中),还需要加一个pr变量表示该元素的上一个元素的下标idx

举个例子,还是上叙边,边(1 3 4) 的 pr 就为 1 (1 2 1)

而由于last数组的存在,pr的值其实就是现在last[f]中的值(加入一个新元素此时该新元素就是集合最后一个,last[f]就为对应下标)

** 当然第一个元素的pr就为last[]中的初始值-1,表示为一个元素 **

标签:pr,星图,下标,前向,数组,链式,集合,last,前向星
来源: https://www.cnblogs.com/yyghw/p/14791670.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有