我试图用大O.计算算法的不同变化的复杂性复杂性计算算法使用大O
算法的简化描述如下:
让我们考虑一个“转换器”功能这需要某个对象并将其转换为另一个表示。每个转换器都定义了它的域和范围。
有一个例程需要源对象(即要转换的对象),转换器函数列表以及转换的预期类型。
它在转换器列表上进行迭代,直到找到其域和范围与要转换的对象兼容的转换器以及预期的转换类型。
据我所知,它的复杂性应该是O(n),因为它直接取决于转换器的数量。
现在,如果每个转换器可能需要递归地调用转换例程一定次数,那么复杂度如何?
例如,它可能需要将源对象的某些组件转换为稍后将组装为要返回的对象(原始转换的目标)的其他对象。
据我了解,非正式这给:
n + m1(n + m2 (n + m3 (...))))
其中:
- n是努力找到原转换器的测量。
- m1应由转换例程转换的源对象子组件的数量。
- m2来自原始m1对象的子组件的最大数量。
- 等...
作为一个额外的细节,子转换应在每个递归调用减少的数量。
这是正确的吗?如果是这样,我应该如何将这个公式缩减为大O符号?
最后,如果有一种智能索引系统使我能够在转换器列表中快速找到正确的转换器功能,那将会是多么的复杂? 据我所知,在最简单的情况下,一个转换器不会递归调用转换函数,这应该是O(log n),是正确的?
但是,如果每个转换器(如前一种情况)可能需要递归调用转换函数,那么基于索引的算法的复杂度是多少?