From a4b22bbd0712dc37ed1f510403f01e9fa486e1fe Mon Sep 17 00:00:00 2001 From: hissin Date: Fri, 21 Nov 2025 15:06:14 +0800 Subject: [PATCH] docs: Remove design document --- docs/DESIGN_DOCUMENT.md | 84 ----------------------------------------- 1 file changed, 84 deletions(-) delete mode 100644 docs/DESIGN_DOCUMENT.md diff --git a/docs/DESIGN_DOCUMENT.md b/docs/DESIGN_DOCUMENT.md deleted file mode 100644 index 570a053..0000000 --- a/docs/DESIGN_DOCUMENT.md +++ /dev/null @@ -1,84 +0,0 @@ -# 算法测试用例生成与自我验证平台 - 设计文档 - -## 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,完善性能对比的可视化报告。