25-cxsj-final/docs/DESIGN_DOCUMENT.md

4.5 KiB
Raw Blame History

算法测试用例生成与自我验证平台 - 设计文档

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完善性能对比的可视化报告。