| name | algorithm-advisor |
| description | 为复杂的系统设计问题提供算法建议和优化方案。分析约束条件,评估不同算法方案,提供具体的实现策略。 |
| license | MIT |
算法顾问 (Algorithm Advisor)
概述
算法选择是系统设计的核心。选择错误的算法可能导致性能瓶颈、可扩展性问题和成本超支。本技能帮助你在给定的约束条件下,选择和优化最合适的算法。
核心原则: 没有万能的算法,只有权衡取舍。理解你的约束,评估你的选项,做出有根据的决定。
何时使用
始终:
- 设计新的系统功能和特性
- 优化现有的性能瓶颈
- 评估不同的技术方案
- 处理大规模数据或高并发场景
- 需要满足特定性能或准确性要求时
触发短语:
- "怎样设计一个..."
- "哪个算法适合..."
- "如何优化..."
- "需要 O(n) 的解决方案"
- "如何达到 100ms 响应"
算法顾问的功能
需求分析
- 理解约束 - 吞吐量、延迟、准确性、成本
- 识别权衡 - 时间 vs 空间、准确性 vs 速度
- 量化指标 - 具体数字和阈值
- 识别瓶颈 - 哪里最关键
算法评估
- 列举选项 - 2-4 个可行方案
- 性能分析 - 时间复杂度、空间复杂度
- 成本评估 - 开发、维护、运维成本
- 风险评估 - 各方案的风险点
解决方案设计
- 架构设计 - 模块化、分层设计
- 数据结构 - 选择合适的数据结构
- 优化策略 - 缓存、索引、并行处理
- 实现路径 - 分步实现计划
验证和测试
- 性能测试 - 如何验证性能指标
- 边界条件 - 极端情况如何处理
- 可扩展性 - 如何支持更大规模
常见算法选择场景
搜索和排序
场景: 在 100 万商品中快速搜索
约束: <100ms 响应时间
选项 1: 线性搜索 O(n)
- 性能: 100ms 对 100 万条
- 成本: 低
- 缺点: 无法扩展
选项 2: 二分搜索 O(log n) (需要排序)
- 性能: <1ms 对 100 万条
- 成本: 中等(排序开销)
- 缺点: 数据必须提前排序
选项 3: 哈希表 O(1) 平均
- 性能: <1ms
- 成本: 内存开销
- 推荐: 用于精确匹配
选项 4: 倒排索引 (ElasticSearch)
- 性能: <100ms,支持模糊搜索
- 成本: 中等
- 推荐: 用于全文搜索
推荐系统
场景: 1000万用户,100万商品,100ms 响应
选项 1: 协同过滤 (Collaborative Filtering)
- 性能: O(k*log n),k 是推荐数量
- 准确性: 高(>80%)
- 冷启动: 差
- 推荐: 高活跃用户
选项 2: 内容推荐 (Content-Based)
- 性能: O(n),预计算
- 准确性: 中等(60-70%)
- 冷启动: 好
- 推荐: 新用户/新商品
选项 3: 混合模型 (Hybrid)
- 性能: O(k*log n)
- 准确性: 更高(>85%)
- 冷启动: 好
- 推荐: 平衡方案
选项 4: 深度学习 (DNN)
- 性能: <100ms(离线计算)
- 准确性: 最高(>90%)
- 成本: 高(GPU)
- 推荐: 大规模高价值场景
缓存策略
场景: 热点数据访问,需要降低数据库压力
选项 1: LRU (Least Recently Used)
- 适用: 工作集相对固定
- 实现: HashMap + DoublyLinkedList
- 成本: O(1) 访问
选项 2: LFU (Least Frequently Used)
- 适用: 有明显冷热分布
- 实现: HashMap + PriorityQueue
- 成本: O(log n) 访问
选项 3: 时间衰减 (Time-decay)
- 适用: 流量随时间变化
- 实现: 复杂
- 成本: O(log n) 访问
选项 4: Redis 集群
- 适用: 大规模分布式缓存
- 性能: <10ms 延迟
- 成本: 中等(额外机器)
数据处理
场景: 处理 100GB 日志,提取关键指标
选项 1: 单机处理
- 性能: 几小时
- 成本: 低
- 缺点: 慢,容易超时
选项 2: MapReduce/Hadoop
- 性能: 30 分钟
- 成本: 中等(集群)
- 缺点: 写法复杂
选项 3: Spark
- 性能: 5-10 分钟
- 成本: 中等
- 推荐: 通用大数据处理
选项 4: 流处理 (Kafka + Flink)
- 性能: 实时
- 成本: 高
- 推荐: 实时分析需求
算法选择检查清单
理解需求:
评估选项:
选择方案:
如何使用本技能
1. 明确问题
任务: 为电商平台设计个性化推荐系统
上下文:
- 100 万商品
- 1000 万用户
- 平均 100ms 响应时间
- 日均 1 亿次推荐请求
2. 分析约束
性能约束:
- 响应时间: <100ms (p99)
- QPS: 1000+
准确性约束:
- 推荐准确率: >80%
- 多样性: 类别覆盖 >5 种
成本约束:
- 不超过 1000 万人民币年预算
- 开发周期: 3 个月
3. 提出方案
方案 1: 离线协同过滤 + 在线召回
方案 2: 混合模型(内容 + 协同)
方案 3: DNN 模型(如果成本允许)
4. 详细设计
选定方案: 混合模型
架构:
1. 离线计算层 - 协同过滤、内容相似度
2. 在线服务层 - 快速排序和多样化
3. 缓存层 - 热点推荐预缓存
常见陷阱
❌ 过度优化
- 为了 1ms 延迟优化,增加 100 倍复杂度
- 在真正的瓶颈出现前优化
❌ 忽视权衡
- 不了解算法的性能权衡
- 选择看起来最快的,忽视内存/成本
❌ 无法扩展
- 选择对小规模有效但无法扩展的算法
- 没有考虑 10 倍/100 倍增长
❌ 过度设计
❌ 忽视实现复杂度
- 算法复杂度低,但实现困难
- 增加开发时间和 bug 风险
红旗警告 - 重新评估
- 算法复杂度 > O(n²),数据量 > 百万级
- 无法满足响应时间要求
- 需要支持 10 倍扩展但算法无法扩展
- 实现复杂度超出团队能力
- 成本高于预算
相关技能
- Architecture Analyzer - 理解整体架构
- Performance Optimizer - 性能优化
- Database Design - 数据库算法选择
- Distributed Systems - 分布式算法
资源