仅当您不知道与哪种类型的图形合作时,您只需假设边缘数量。如果您已经知道边缘的数量,则可以为搜索提供更精确的最坏情况。这很有用,例如在比较将在同一图上运行的不同算法时,并允许您区分仅在边缘很少的图表上正常工作的算法。
我更喜欢使用|𝑉|和|𝐸|参考顶点数量和边数。但是,是的,您可以自由使用O(|𝑉|²)。 ,但是要意识到它提供的信息少于O(|𝑉|+|𝐸|)。例如: 如果您将图表中的边缘数量加倍或减半,那么知道时间复杂性会发生什么情况。使用o(|𝑉|²),您对此一无所知。 o(|𝑉|²)假设该图在相同的节点之间没有循环或多个边缘,而O(|𝑉|+|𝐸|)在这些配置中也保持正确。
𝑉和𝐸就像两个“拨号”您可以“转”以查看对复杂性的影响。您可以转动更多的“拨号”来查看对复杂性的影响,您对算法对不同类别的输入的效率的了解越多。 concy通常,如果可用的话,以多个维度表达复杂性更有趣。
举一个例子。假设我们有一种算法,该算法计算给定整数阵列中存在的质量数量,据说它具有O(𝑛log𝑛)的复杂性。如果我们还了解到此数组可以具有负值,那么在该数组中表达阵列(𝑛)中的复杂性可能很有趣。这将为复杂性提供更精确的表达,这可能是O(𝑛 +𝑝log𝑝)。