图论基础——类实现——绪论

图论基础——类实现——绪论

序言

欢迎来到我的第一篇博客,作为一个初次尝试类似类型的博客的新人,难免会出现各种语言解释不够清晰,代码出现bug的情况,还望看客能够包容,并友善提出错误。

写这篇博客的原因,主要在于我近期正在上的图论理论课。在这堂课上,老师系统地讲解有关图论的 基础知识,以及各种推论,以及算法,并辅以算法OJ测验。其间在对图的各种算法的实现过程中,我发现每次实现一个算法,都要根据算法特征重新考虑图的储存方式,并利用数组、哈希表等的组合来配合算法进行具体的实现。这种方式虽然能够最大化利用存储,提高效率,也符合一般ACM竞赛的写代码方式,但是在应对大量图算法的时候就有些捉襟见肘,且极其容易在某个不易察觉的地方出错,而这种错误在图的算法中很难被检测出来。

因此,我就想要在网上寻找一些能够满足基本图的性质,以及相应算法的C++类库,但很遗憾的是,虽然网上能够找到大量用C/C++,JAVA实现的算法,却很少有人能系统地将图结构进行封装,并将图与图的算法分离开,使得相比于关注图的内部实现,在图上运行的算法更加令人容易理解。

实际上,目前大多数基础的图算法,其依赖的图操作往往只有少数几个,且往往是从邻接顶点或邻接边开始的,例如以下几个图算法:

图算法依赖操作推荐图结构
最短路径(Dijkstra)访问邻接边邻接表
最短路径(Floyd)访问任意边邻接矩阵
最大团访问邻接边邻接表
最大匹配访问邻接边邻接表
最小生成树(Kruskal)提取最小边邻接多重表
AOV网络最短路径访问邻接边邻接表

可以看到,大多数图算法都只需要访问邻接顶点/边的操作,对应的图结构是邻接边;偶尔会出现访问任意边,对应于邻接矩阵;而对于一些特殊的要求,例如提取最小边等,所需要的邻接多重表也可以直接通过邻接矩阵,利用 指针的方式 来实现。

因此,我们可以借此将图的结构与图算法的实现分隔开来,在图算法中,利用图类提供的抽象接口来实现相关操作。此外,利用C++的抽象类功能,可以将图类的接口与图结构的具体实现分离开,使得形成一个图算法使用图接口,图结构填充图接口的层次结构形式,运用类的多态性(多继承)可以实现这一功能, 具体如下:

图的抽象实现
图算法
图的具体实现

在以后的博客中,我会陆续从以下的角度更新该话题的内容:

  • 图的抽象类及其继承关系
  • 图的具体实现
    • 邻接矩阵
    • 邻接表
  • 算法类的继承关系
  • 各种图算法的实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值