普通案例、基本案例和边缘案例之间有什么区别?

What's the difference between trivial case, base case, and edge case?

在谈论算法时,我经常 运行 使用这些术语。

小案例

基本案例

边缘情况

它们都一样吗?或者它们之间有什么显着差异吗?

A "trivial case" 是一个简单的、有限的算法仍然可以解决的情况。例如,您需要对数字列表进行排序,但它们已经排序。

A "base case" 通常与递归相关使用,指的是直接处理的情况,没有任何进一步的递归。例如,快速排序单个元素。 (基本情况通常也是微不足道的。)

"edge case" 是一种在某种程度上不寻常的情况,它没有被适用于大多数情况的逻辑正确处理,或者导致性能或结果特别差。例如,对所有元素都相等的数组进行快速排序,就无法选择一个有效的主元。

下面说说阶乘的算法

factorial (n) = n * factorial (n - 1) if n > 0
              = 1 if n is 0
              = error if n < 1

普通案例:如果算法正常,应该通过的简单案例。 (类似于冒烟测试)通常可以在心里或用笔和纸来计算。示例阶乘 (3) 或阶乘 (5)
基本情况:算法收敛的递归终止条件。在这种情况下 n 为 0。
边缘情况:由于语言限制(变量溢出、被零除等)算法可能给出错误答案的情况,或者算法应该优雅地报告错误而不是崩溃的情况。