知识卡片
多方法无银弹
内容
一个类有多个长期交互的方法时,优化某个方法常会拖慢另一个方法,因此不存在脱离使用场景的绝对最快实现。发散:选择数据结构前先估计调用频率和调用顺序,而不是只看单个操作。
参考来源
- 位置:《你真的会写代码吗-2021》第3章《速度的要求:时间效率》"偏序"专栏及章节导言(源文件:_epub-src/OEBPS/Text/0013.xhtml)
- 结论依据:原文明确"在像我们这样的多方法环境中,最坏情况时间复杂度会引起多种实现之间的偏序……如果不降低其他方法的性能,则无法改善任何方法",并说明三种实现都是帕累托最优、没有绝对最快版本。
- 原始内容:不同的数据结构可能会偏向于某一种方法而不是另一种,降低前一种方法的复杂度却减慢了后一种方法的速度。因此,通常没有绝对的最佳解决方案,只是有不同的取舍而已……如果你正在设计一个类,而且不知道每个方法的调用次数和顺序(也就是说不知道使用情况),最好的做法就是选择一个性能是帕累托最优的实现。