# 算法测试用例生成与自我验证平台 - 设计文档 ## 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,完善性能对比的可视化报告。