排序、统计与路径规划是初中组题目中最常见的三类基础方法。它们经常不是单独出现,而是组合出现:先统计,再排序;先建图,再比较路线;先分类累计,再做决策。因此,这篇文档的目标不是把三类方法割裂开,而是告诉你在什么场景下选什么方法,怎样一步一步落到代码。
学习目标
- 学会判断什么时候该排序、什么时候该统计、什么时候该建图。
- 学会为多指标题目选择主关键字和次关键字。
- 学会在时间序列、分类数据和网络结构中提取核心指标。
- 学会用 BFS、Dijkstra 和状态扩展思路处理路径规划题。
适用场景
排序
- 多个对象需要比较优先级。
- 题目要求按得分、效率、时间、成本、风险等指标输出顺序。
- 需要先按主指标排序,再按次指标打破并列。
统计
- 需要计数、求和、平均值、最大值、最小值。
- 需要按类别、时间段、渠道、阶段做分组累计。
- 需要根据历史数据做趋势判断或简单预测。
路径规划
- 题目中出现节点、边、距离、时间、代价、风险等网络元素。
- 需要找到最短、最低代价或最优资源路线。
- 存在载重、补给、地形、资源等额外约束。
排序方法
一、先确定排序目标
做排序题前先回答两个问题:
- 你要找的是“最大/最小”,还是“完整排序结果”。
- 如果第一关键字相同,第二关键字是什么。
例如 非遗综合分析:匠人效率分级与生产策略建议 中,可能会先按效率排序,再按残次率、工时等指标做次序调整。
二、常见排序策略
- 单关键字排序:只按一个指标升序或降序。
- 多关键字排序:先按主指标,再按次指标。
- 排序后分级:排序完成后按阈值或排名划分等级。
三、实现步骤
- 计算每个对象的核心指标。
- 把指标放进统一的数据结构。
- 写清楚排序规则。
- 检查并列时的输出是否符合题面。
统计方法
一、基础统计
- 计数:统计某类对象出现多少次。
- 累计:把价格、距离、覆盖人数、工作量等加总。
- 极值:找最大值、最小值。
- 平均:求平均值并注意精度。
二、分类统计
适用于按渠道、地貌、工序、等级等类别汇总数据。
常见做法:
- 用字典或映射表按类别累计。
- 输出前再按类别名或累计值排序。
三、趋势统计
适用于 红色民生数据分析:根据地建设进度趋势预测 和 民族文化宣传:节日客流与视频热度预测 这类时间序列题。
常见思路:
- 先看相邻两期差值。
- 再看整体是上升、下降还是波动。
- 最后根据规则或均值给出下一期估计。
路径规划方法
一、什么时候要建图
只要题目中出现以下要素,就要考虑图建模:
- 地点与地点之间的连接关系
- 每条连接的代价、距离、时间、风险
- 需要从起点走到终点,并比较路线优劣
二、BFS 适合什么
- 边权相同或只关心“最少步数”。
- 例如在网格、简单通路中找最少经过节点数。
三、Dijkstra 适合什么
- 每条边的代价不同。
- 需要求最小总代价、最短总时间、最小总风险等。
四、状态扩展最短路
在 红色路线与资源调度:长征片段补给路线规划 和 丝路驼队运营规划:载重与补给优化 中,路线好不好不仅由距离决定,还与补给、载重、资源剩余有关。此时需要把“当前位置 + 资源状态”一起看成状态。
五、路径规划分步方法
- 先确定节点是什么,边是什么。
- 为每条边定义代价或约束。
- 明确最优目标是距离、时间、风险还是综合代价。
- 选择 BFS、Dijkstra 或状态扩展。
- 检查是否存在不可达情况。
输入输出分析
排序题
- 输入通常是一组记录。
- 输出可能是排序后的完整列表,也可能只是前几名和分级标签。
统计题
- 输入可能是时间序列、分类数据或多张记录表。
- 输出通常是汇总值、趋势标签、预测值或分类结果。
路径题
- 输入通常包括节点数量、边数量、边信息和额外约束。
- 输出可能是总代价、最优路径、是否可达和资源消耗说明。
方法清单
| 方法 | 解决什么问题 | 时间复杂度提示 | 典型 case |
|---|---|---|---|
| 单关键字排序 | 快速找顺序 | 常见为 O(n log n) | s1-jh-04 |
| 多关键字排序 | 并列时继续比较 | 常见为 O(n log n) | s1-jh-04、s4-jh-04 |
| 分类累计 | 按类别汇总 | 常见为 O(n) | s2-jh-03、s3-jh-04 |
| 趋势统计 | 判断上升下降和预测 | 常见为 O(n) | s2-jh-02、s4-jh-03 |
| BFS | 最少步数路径 | 常见为 O(n + m) | 简化路径题 |
| Dijkstra | 带权最短路 | 常见为 O((n + m) log n) | s2-jh-01 |
| 状态扩展最短路 | 带资源约束的最优路 | 视状态数量而定 | s2-jh-01、s3-jh-02 |
常见错误
- 排序时忘记题目要求是降序还是升序。
- 并列情况没有写次关键字,导致输出不稳定。
- 统计时把“总和”和“当前值”混用。
- 趋势题把短期波动误判成长期趋势。
- 路径题只记录节点,不记录与资源相关的状态,导致最优解被漏掉。
- 没有处理不可达、空图或单节点等边界情况。
与题库 case 的联系
s1-jh-04-heritage-multi-analysis
- 重点练多指标排序、综合评分和分级输出。
s2-jh-01-route-supply
- 重点练图建模、最短路和资源约束路线。
s2-jh-02-livelihood-trend
- 重点练时间序列统计、趋势标签和简单预测。
s3-jh-02-caravan-plan
- 重点练载重、补给和路线代价之间的平衡。
s4-jh-04-resource-allocation
- 重点练排序、规则筛选和多约束方案比较。
训练建议
- 先用小数据手算一遍,再写排序和路径代码,确保规则理解正确。
- 做路径题时,先画图,再写代码;做排序题时,先写出关键字顺序,再实现。
- 每完成一题,都回顾这道题到底主要依赖排序、统计还是路径规划,避免方法混淆。