我试图优化这段代码,但不可能再进行优化了。
请帮助建立此算法的流程图。
A = [-1,0,1,2,3,5,6,8,10,13,19,23,45];
B = [0,1,3,6,7,8,9,12,45];
N1 = length(A);
N2 = length(B);
t = 1;
m = 10;
C = [];
for i=1:N1
for j=1:N2
if A(i)==B(j)
break
else
if j==N2
C(t)=A(i);
t=t+1;
end
end
end
end
disp(C);
N3=length(C);
R = [];
y = 1;
for l=1:N3
if C(l)>m
R(y)=C(l);
y=y+1;
end
end
disp(R);
如何求算法的时间复杂度
我认为应该是O(n)。
优势(初等)运算:比较A(i)== B(j)
但我还不确定。
我做不到
复杂性函数(最坏情况)
和
最糟糕的计算复杂度:()
发布于 2020-01-10 10:21:59
“优化”取决于您的示例目标,您可能希望最小化浮点操作的数量,或者最小化Scilab指令的数量,或者最小化算法的执行时间。
由于Scilab是一个整数的语言,因此可以使用矢量化来减少执行时间和代码长度。
例如,您的代码
N3=length(C);
R = [];
y = 1;
for l=1:N3
if C(l)>m
R(y)=C(l);
y=y+1;
end
end
可重写:
R=C(C>m)
在这里,计算机操作的数量与原始代码大致相同,但是执行时间要快很多倍:
设C=rand(1,000);m=0.5;
--> timer();R=C(C>0.5);timer()
ans =
0.000137
--> timer();
--> N3=length(C);
--> R = [];
--> y = 1;
--> for l=1:N3
> if C(l)>m
> R(y)=C(l);
> y=y+1;
> end
> end
--> timer()
ans =
0.388749
发布于 2020-01-09 00:23:00
这似乎是家庭作业。
至于时间复杂性,它看起来更像是O(n²)
,因为您有一个for循环,而在另一个for循环中。最近,我开始观看关于Udemy上的算法和数据结构的课程,这是我强烈推荐的。他很好地解释了BigO表示法:) 链接 (当然)。(与提交人无关)
发布于 2020-01-15 22:46:32
就优化而言,您应该考虑Scilab (以及它的其他数学编程语言MATLAB和Octave)本质上是向量化的。这意味着,如果您使用的for loops
太多,您可能应该回去阅读一些文档和教程。您编写的代码的规范版本可以实现为:
A = [-1, 0, 1, 2, 3, 5, 6, 8, 10, 13, 19, 23, 45];
B = [0, 1, 3, 6, 7, 8, 9, 12, 45];
C = setdiff(A, B);
disp(C);
m = 10;
R = C(C > m);
disp(R);
结果:
-1。2.5.10.13.19.23。
https://stackoverflow.com/questions/59653668
复制相似问题