Java数据结构与Java算法学习Day11---有向图、拓扑排序、加权无向图、最小生成图、加权有向图、最短路径(简略笔记记录)

目录

一、有向图 157

1.1有向图的定义及相关术语 157

1.2有向图的实现 158

二、拓扑排序 159

2.1检测有向图中的环 160

2.1.1检测有向图中环API设计 160

2.1.2检测有向环实现 161

2.2基于深度优先顶点排序 162

2.2.1顶点排序API设计

2.2.2顶点排序实现的原理过程

2.2.3顶点排序代码的实现及测试 162、163、164

三、加权无向图 165

3.1加权无向图边的表示---加权的边实现 166

3.2加权无向图边的表示---无向图的实现 167

四、最小生成图 168

4.1最小生成树定义及相关约定 168

4.2最小生成树原理---切分定理 169

4.2.1树的性质

4.2.2切分定理

4.3贪心算法 170

4.4Prim算法 171

4.4.1Prim算法API设计

4.4.2Prim算法的实现原理 172  

4.4.3Prim算法的代码实现及测试173、174、175

4.5kruskal算法 176

4.5.1kruskal算法API设计 

4.5.2kruskal算法的实现原理 177

4.5.3kruskal算法代码实现及测试 178、179

五、加权有向图 180

5.1加权有向图边的表示 180

5.2加权有向图的实现 181

六、最短路径182

6.1最短路径定义及性质 182

6.2最短路径树API设计 182

6.3松弛技术 183

6.4Dijstra算法实现及测试 184、185、186


一、有向图 157

图的边是有方向的

1.1有向图的定义及相关术语 157

 

1.2有向图的实现 158

 

二、拓扑排序 159

基于有向图实现拓扑排序。

2.1检测有向图中的环 160

检测有向图环的目的:

有向图中存在环,就没办法进行拓扑排序了

2.1.1检测有向图中环API设计 160

 成员变量:onStack的原理:利用栈的思想进行操作的。如下所示:

2.1.2检测有向环实现 161

2.2基于深度优先顶点排序 162

2.2.1顶点排序API设计

2.2.2顶点排序实现的原理过程

文档P11

2.2.3顶点排序代码的实现及测试 162、163、164

三、加权无向图 165

 ​​​​​​​

3.1加权无向图边的表示---加权的边实现 166

3.2加权无向图边的表示---无向图的实现 167

四、最小生成图 168

4.1最小生成树定义及相关约定 168

 

分别计算各个独立的连通图。这些组合在一起称为最小生成森林。

4.2最小生成树原理---切分定理 169

4.2.1树的性质

4.2.2切分定理

切分: 

横切边:

切分定理:

4.3贪心算法 170

基于切分定理实现的

步骤一:

步骤二:

步骤三:

 步骤四:

 步骤五:

 步骤六:

 步骤七:

 步骤八:直到所有的顶点都被连接起来,则说明查找完毕

 

 贪心算法是基础:

求最小生成树的算法都是贪心算法的一种变形

4.4Prim算法 171

Prim算法实现的过程:

步骤一:

 ​​​​​​​步骤二:

 其他的部分依次类推,就可以找到所有的最小生成树了。

4.4.1Prim算法API设计

4.4.2Prim算法的实现原理 172  

参考文档P27

4.4.3Prim算法的代码实现及测试173、174、175

4.5kruskal算法 176

 ​​​​​​​

 

 是将森林进行连接

4.5.1kruskal算法API设计 

本部分使用了并查集 

4.5.2kruskal算法的实现原理 177

文档P32

4.5.3kruskal算法代码实现及测试 178、179

五、加权有向图 180

5.1加权有向图边的表示 180

5.2加权有向图的实现 181

 

六、最短路径182

 ​​​​​​​

6.1最短路径定义及性质 182

这个不是最小生成树,最小生成树是所有的顶点都要连接起来,这个只是连接需要的两个顶点。

路径:可以是部分的连接

6.2最短路径树API设计 182

6.3松弛技术 183

 边的松弛:

 顶点的松弛:

 

6.4Dijstra算法实现及测试 184、185、186

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 SpringMVC 中,我们可以通过 ResponseBody 注解返回音频流,具体步骤如下: 1. 在 Controller 中定义一个返回类型为 ResponseEntity<byte[]> 的方法,该方法需要使用 @ResponseBody 注解标注。 2. 在方法中获取音频文件的字节数组,并将其放入 ResponseEntity 对象中返回。 3. 在 ResponseEntity 对象中设置 Content-Type、Content-Disposition 等响应头,以便浏览器正确解析音频流并进行播放。 示例代码如下: ```java @RequestMapping("/audio") @ResponseBody public ResponseEntity<byte[]> getAudio() throws IOException { // 读取音频文件字节数组 InputStream in = getClass().getResourceAsStream("/static/audio/sample.mp3"); byte[] audioBytes = IOUtils.toByteArray(in); // 设置响应头 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.parseMediaType("audio/mpeg")); headers.setContentDispositionFormData("attachment", "sample.mp3"); // 返回音频流 return new ResponseEntity<>(audioBytes, headers, HttpStatus.OK); } ``` 上述代码中,我们将音频文件 sample.mp3 放在了项目的 /static/audio 目录下。在方法中,我们使用 IOUtils.toByteArray() 方法将音频文件转换为字节数组,并将其放入 ResponseEntity 对象中返回。在设置响应头时,我们使用 MediaType.parseMediaType() 方法设置 Content-Type,使用 setContentDispositionFormData() 方法设置 Content-Disposition。最后,我们通过 new ResponseEntity<>(audioBytes, headers, HttpStatus.OK) 创建 ResponseEntity 对象并返回。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值