数据结构 大作业
1. 找出湖景房
1.1 实验内容
在湖边有一排东西向排列的房子。如果一个房子比它东边的所有房子都高,我们称之为湖景房。如图 1-1 所示,阴影的房子都是湖景房。一位旅行者从西往东走至湖景处,决定逗留几天。假设每栋房子的高度存放于数组 A[1…n] 中,请你帮他找出所有的湖景房。
1.2 实现步骤
因为房子从左向右排列,但是找出湖景房需要将房子与其右侧的所有房子做比较,且最右方的房子必然为湖景房。
可以利用栈后进先出的特性,先把房子高度数组元素正序压入栈 s1,然后按照房子高度数组元素的逆序弹出栈顶元素,因为第一个栈顶元素对应最右侧湖边的房子,其必定为湖景房,所以直接压入栈 s2 中。
然后按照题中对湖景房的定义,将每一个从栈 s1 弹出的栈顶元素放入 height 并与储存湖景房高度的 s2 中的栈顶元素进行比较,若弹出的栈顶元素 height 比 s2 中的栈顶元素大,则 height 为湖景房并压入栈 s2。最后将栈 s2 进行遍历,输出所有的湖景房的高度。
1.3 程序清单
1 | |
1.4 调试步骤
- 输入测试数据
1 | |
- 程序输出
1 | |
1.5 分析与思考
设 n 为总人数,m 为需要找出的前 m 名。
空间复杂度:$O()$
时间复杂度:$O()$
2. 学生数据管理
假设某大学某个专业共有 N (<=1000) 位学生,分为 K 个班。所有学生已完成前三学年的课程,并根据前三年的课程计算出了每个学生的绩点。学生信息包括学号、姓名、性别、专业、班级、绩点。所有学生的学号连续,同一个班的学号也连续。假设用顺序表存储这些信息,请完成以下任务。
2.1 任务一
请用 C 语言表示学生信息的存储结构。
1 | |
2.2 任务二
假设每个班的学生信息按学号顺序存储,设计一个算法找出该班绩点的中位数,要求不能对绩点完全排序,复杂度不高于 $O(n log n)$。
因为不能对绩点完全排序,且复杂度不得高于 $O(n log n)$。我用的是基于分治策略的中位数查找算法。
首先在所有的学生数据中取中间学生的位次记为 mid,绩点数据记为 value。然后利用 value 这一值,将全班学生按照绩点分为三个组,大于 value 的分到 big,等于 value 的分到 middle,小于 value 的分到 small。如果 small 组的长度大于 mid,则中位数在 small 组中。如果 small < mid <= small + middle,则中位数为 value。如果 mid >= small + middle,则中位数在 big 组中。
1 | |
2.3 任务三
设计一个算法对一个班的学生按绩点进行升序排序,绩点相同的学生按学号升序排序,要求算法时间复杂度为 $O(n log n)$。
时间复杂度为 $O(n log n)$ 的排序算法有希尔排序、堆排序、快速排序和归并排序。这里我使用的是快速排序,同样利用分治策略,先取一个基准值,然后将比基准值的大的元素放到基准值右边,比基准值小的放到左边,然后多次重复直到各区间只有一个数。
1 | |
2.4 任务四
假设每个班的同学都已按绩点排好序 (升序),设计一个算法把该专业所有同学按绩点进行升序排序,要求算法复杂度为 $O(n)$。
因为各班成绩已经排好序,可以将每个班绩点最低的学生拿出来进行比较,找到年级绩点最低的学生并转到年级绩点排名顺序表中,如此循环,完成排序。
1 | |
2.5 任务五
假设学生信息按学号顺序存储,设计一个按学号查询绩点的算法,要求算法复杂度为 $O(log N)$。
因为要求时间复杂度为 $O(log N)$,所以采用二分搜索算法。
1 | |
2.6 任务六
假设学生信息按学号顺序存储,设计一个查询某个绩点都有那些学生的算法,给出算法的复杂度分析。
因为学生信息采用顺序表储存,可以采用直接查找的方式找出相同绩点的学生。时间复杂度和空间复杂度均为 $O(n)$。
1 | |
3. 物流配送路径规划问题
自 2004 年开始,网络购物作为时代的产物不断改变着人们的购物方式,成为生活必不可少的一部分。如图 3-1 所示,截至 2021 年 12 月,中国网购用户已达 8.4 亿人。当我们在享受网络购物便利性的同时,不得不承认快递物流起到的重要作用。消费者选购的商品从商家仓库出发,基于物流系统寄往全国各地,3 至 5 天即可到达消费者手中,享受在家“逛商场”的便利。
但是从 2019 年开始,新冠疫情反复多点爆发,中高风险区为控制疫情外泄风险,出台交通管制政策,因此“封路+停运”成为了物流面临的常态化问题。如图 3-2 所示,截至 5 月 23 日,引自“中国邮政速递物流”网,受疫情管控措施影响,多达 40 多个城市网点收寄业务遭到停发或时效风险。在后疫情背景下,物流系统经过两年多的发展,逐渐成熟,“中心仓+云仓分仓”经营模式应运而生,即:商家可以将库存交给拥有智慧云仓的物流服务商,建立多级的仓储体系,及时进行智慧调拨,云仓多仓发货,不仅快速高效,而且在后疫情时代帮助商家有效降低依靠商家单一仓储带来的停发风险,保障了全国物流系统的稳定运行。目前我国如京东云仓,菜鸟云仓,中通云仓等发展迅速,图 3-3 展示中通云仓科技在全国范围内覆盖的 60 个仓库,实现全国多仓库智慧发货。
请运用数据结构知识,从以下几个方面思考并分析疫情管控期间全国多仓发货是如何降低电商物流受阻乃至停发风险的?
所用参数说明:城市数量 n,疫情管控城市数量 m,全国云仓发货仓数量 t,要求:n≥𝟏𝟎,m≥𝟑,t≥𝟑。
3.1 任务一
传统商家单一仓发货模式下,物流如何规划最短路径将商品送达。
测试数据:顶点数 10 个,边数 20 条。
边的权值:
1 | |
实例输出结果:商家仓 a 到买家 e 的最短路径长度为 12。
1 | |
3.2 任务二
传统商家单一仓发货模式下,若最短路径中有道路管控,如何选取不含该管控点的最短路径。
1 | |
3.3 任务三
全国多仓发货模式下,如何智慧选取发货仓,并构建最短路径将商品送达。
1 | |
附录
文件列表
- 2022年-数据结构-大作业.pdf
下载地址
- 蓝奏云链接:https://unrealfeathers.lanzouu.com/iafNa2spfkzg
- 蓝奏云提取密码:3afc