Algorithm 如何确定算法复杂度?

Algorithm 如何确定算法复杂度?,algorithm,complexity-theory,Algorithm,Complexity Theory,我似乎不明白如何确定算法的复杂性 例如: for j=n:-1:1 for i=j+1:n x(i,j)=0 x(j,j)=b(j,j)/c(j,j) for i=j-1:-1:1 x(i,j)=(b(i,j)-c(i,i+1)*x(i+1,j))/c(i,i) 这更像是一道数学题,但仍然是 我使用简单的求和公式,结果是2·n2,但似乎正确的结果是5·n2/2 有人能帮我理解正确的计算方法吗?假设你是用MATLAB编写的,复杂度是O(n

我似乎不明白如何确定算法的复杂性

例如:

for j=n:-1:1
    for i=j+1:n
        x(i,j)=0
    x(j,j)=b(j,j)/c(j,j)
    for i=j-1:-1:1
         x(i,j)=(b(i,j)-c(i,i+1)*x(i+1,j))/c(i,i)
这更像是一道数学题,但仍然是

我使用简单的求和公式,结果是2·n2,但似乎正确的结果是5·n2/2


有人能帮我理解正确的计算方法吗?

假设你是用MATLAB编写的,复杂度是O(n^2)。请注意,您正在评估总和:


和{j=1到n}j+(n-j)=和_{j=1到n)n=n^2

j=n:-1:1这样的符号是什么意思?你想测量什么?如果你想确保你的常数因子是正确的,你需要解释你想测量什么。换句话说,对于你典型的算法复杂性分析,2n^2和(5/2)之间没有区别n^2——这两个都是o(n^2)。为了区分这两个,你必须描述你正在计算的内容:内部循环迭代?浮点运算?汇编语言命令?是的,我忘了提到,这是Matlab代码。我需要计算运算的数量(以失败为单位)什么算作运算?只是加法、减法、乘法和除法?加载和存储?我认为问题在于O(n^2)中的常数项是2对5/2,而不是它是否是O(n^2)或者不是。如果是这样的话,那么这个问题就没有多大意义了。为了得到前面的实际常数,你需要准确定义每个表达式中要做多少工作,并为每个循环如何实现建立一个好的模型。否则,我真的不知道常数会计算多少,因为它肯定会不会是CPU时间/工作(可能执行的行数?添加指令?触发器?)。