85 lines
4.5 KiB
Markdown
85 lines
4.5 KiB
Markdown
# 算法测试用例生成与自我验证平台 - 设计文档
|
||
|
||
## 1. 项目概述
|
||
本项目旨在构建一个集“自动出题”、“多算法求解”、“性能分析”于一体的算法学习与验证平台。通过针对特定算法问题生成随机测试数据,并使用不同复杂度的算法进行求解,验证结果一致性并对比运行效率。项目包含一个现代化 Web 前端界面,用于交互式地配置参数与展示图表。
|
||
|
||
## 2. 系统架构设计
|
||
系统采用 **前后端分离** 架构:
|
||
|
||
### 2.1 核心模块
|
||
#### 后端 (Backend)
|
||
1. **Problem Interface (问题接口)**
|
||
* 定义问题的通用接口,包括 `generate_case()` (生成用例), `solve()` (求解), `verify()` (验证)。
|
||
2. **Solver Engine (求解引擎)**
|
||
* 针对每个问题,实现多种算法策略(暴力、分治、DP、贪心等)。
|
||
3. **Performance Analyzer (性能分析器)**
|
||
* 执行基准测试,验证正确性,统计运行时间。
|
||
4. **API Layer (API 层)**
|
||
* 基于 **FastAPI** 提供 RESTful 接口,处理前端的配置请求并返回计算结果。
|
||
|
||
#### 前端 (Frontend)
|
||
1. **Control Panel (控制面板)**
|
||
* 选择算法问题(如“最大子数组和”、“0/1背包”)。
|
||
* 配置生成参数(数据规模、数值范围、稀疏度等)。
|
||
2. **Visualization (可视化展示)**
|
||
* 使用图表库展示不同算法的时间复杂度对比曲线。
|
||
* 展示具体的测试用例数据与解题结果(用于教学演示)。
|
||
|
||
### 2.2 技术栈
|
||
* **后端**: Python 3.x, FastAPI (Web框架), Matplotlib/Pandas (数据分析)
|
||
* **前端**: React, TailwindCSS (样式), Recharts (图表可视化), Axios (网络请求)
|
||
|
||
## 3. 选定算法问题
|
||
|
||
### 问题一:最大子数组和 (Maximum Subarray Sum)
|
||
**描述**: 给定一个整数数组,找到一个具有最大和的连续子数组。
|
||
**测试用例生成**:
|
||
* 随机生成长度为 $N$ 的整数数组。
|
||
* 数值范围可配置(包含正负数)。
|
||
**算法实现**:
|
||
1. **暴力枚举 (Brute Force)**: 双重循环枚举所有子数组,时间复杂度 $O(N^2)$。
|
||
2. **分治算法 (Divide and Conquer)**: 递归将数组分为左右两半,最大子数组可能在左、右或跨越中点,时间复杂度 $O(N \log N)$。
|
||
3. **动态规划 (Kadane's Algorithm)**: 线性扫描,时间复杂度 $O(N)$。
|
||
|
||
### 问题二:0/1 背包问题 (0/1 Knapsack Problem)
|
||
**描述**: 给定一组物品,每种物品都有自己的重量和价值,在限定的总重量内,选择其中若干个(也即每种物品可以选0个或1个),使得物品的总价值最高。
|
||
**测试用例生成**:
|
||
* 随机生成 $N$ 个物品,每个物品具有重量 $w$ 和价值 $v$。
|
||
* 随机生成背包容量 $C$。
|
||
**算法实现**:
|
||
1. **回溯法 (Backtracking)**: 递归枚举所有可能的选择情况,时间复杂度 $O(2^N)$。
|
||
2. **动态规划 (Dynamic Programming)**: 使用二维或一维数组记录状态,时间复杂度 $O(N \cdot C)$。
|
||
3. **贪心算法 (Greedy, 近似解/对比)**: 按价值密度排序选择(注意:0/1背包贪心法通常不能得到最优解,可作为对比项展示“错误”或“近似”的算法,或者用于对比部分背包问题)。*注:本项目中为了验证正确性,主要对比回溯与DP,贪心可作为错误示范分析。*
|
||
|
||
## 4. 目录结构规划
|
||
```
|
||
algorithm_platform/
|
||
├── README.md
|
||
├── DESIGN_DOCUMENT.md
|
||
├── backend/ # 后端代码
|
||
│ ├── main.py # FastAPI 入口
|
||
│ ├── common/ # 通用工具
|
||
│ │ ├── __init__.py
|
||
│ │ ├── base_problem.py
|
||
│ │ └── timer_utils.py
|
||
│ ├── problems/ # 算法实现模块
|
||
│ │ ├── __init__.py
|
||
│ │ ├── max_subarray/
|
||
│ │ └── knapsack/
|
||
│ └── routers/ # API 路由
|
||
└── frontend/ # 前端代码
|
||
├── src/
|
||
│ ├── components/ # UI 组件
|
||
│ ├── pages/ # 页面
|
||
│ └── services/ # API 调用
|
||
├── package.json
|
||
└── vite.config.js
|
||
```
|
||
|
||
## 5. 开发计划
|
||
1. **第一阶段**: 搭建后端核心骨架 (FastAPI + Base Classes)。
|
||
2. **第二阶段**: 实现“最大子数组和”算法逻辑与 API。
|
||
3. **第三阶段**: 搭建 React 前端框架,实现基础交互与图表组件。
|
||
4. **第四阶段**: 实现“0/1背包”算法逻辑,并接入前端。
|
||
5. **第五阶段**: 优化 UI/UX,完善性能对比的可视化报告。
|