Matlab中Big O的转置复杂度是多少?

时间:2019-12-09 10:44:41

标签: matlab big-o transpose code-complexity

如果我有以下两种情况:

第一种情况:

clip-path: circle(50% at center);
-webkit-clip-path: circle(50% at center);

第二种情况:

a = [1 2 3 4]
b = a'  %what's the Big O complexity here for transposing the "a" 1D array.

1 个答案:

答案 0 :(得分:0)

O(1)和O(n),但是这些操作是如此简单,以至于Big-O表示法甚至都不适用。

a = [1 2 3 4]
b = a'

这是O(1),并且超级快。 Matlab甚至不会重新排列(甚至复制!)内存中的实际数据值;它只是复制mxArray标头,并重写其Dimensions数组以指示矢量以4×1而不是1×4布局。

a = [ [1 2 3 4] ; [5 6 7 8] ; [9 10 11 12]]
b = a'

对于实(非复杂)值,这是O(n)。它只是在内存中创建一个新数组,然后将旧数组的值复制到其中,并使用易于计算的数组索引映射算法(就像每个元素两个或三个乘法)改组它们的顺序。

但是:这两个都是微不足道的操作;通常,您甚至都不会使用Big-O表示法来谈论它们。与用于计算结果的“算法”相比,Matlab mxArray内部构件的内存中的阵列复制特定于系统的机制和开销对其性能而言更为重要。算法分析术语可能不是在此级别检查/讨论这些操作的正确级别。

注意:如果将ab设置为稀疏数组而不是常规的“完整”数组,则可能不适用。它们使用不同的数据结构,必须进行更多处理才能重新排列其元素。我很确定这两个参数仍为O(n),但这并不反映它们之间实际的相对性能差异。但这是一个更广泛的问题。