首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >优化、时间复杂度和流程图(Scilab)

优化、时间复杂度和流程图(Scilab)
EN

Stack Overflow用户
提问于 2020-01-08 20:54:58
回答 3查看 185关注 0票数 0

我试图优化这段代码,但不可能再进行优化了。

请帮助建立此算法的流程图。

代码语言:javascript
运行
复制
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)

但我还不确定。

我做不到

复杂性函数(最坏情况)

最糟糕的计算复杂度:()

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-01-10 10:21:59

“优化”取决于您的示例目标,您可能希望最小化浮点操作的数量,或者最小化Scilab指令的数量,或者最小化算法的执行时间。

由于Scilab是一个整数的语言,因此可以使用矢量化来减少执行时间和代码长度。

例如,您的代码

代码语言:javascript
运行
复制
N3=length(C);
R = [];
y = 1;
for l=1:N3
    if C(l)>m
       R(y)=C(l);
       y=y+1;
     end 
end

可重写:

代码语言:javascript
运行
复制
R=C(C>m)

在这里,计算机操作的数量与原始代码大致相同,但是执行时间要快很多倍:

设C=rand(1,000);m=0.5;

代码语言:javascript
运行
复制
--> 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
票数 1
EN

Stack Overflow用户

发布于 2020-01-09 00:23:00

这似乎是家庭作业。

至于时间复杂性,它看起来更像是O(n²),因为您有一个for循环,而在另一个for循环中。最近,我开始观看关于Udemy上的算法和数据结构的课程,这是我强烈推荐的。他很好地解释了BigO表示法:) 链接 (当然)。(与提交人无关)

票数 0
EN

Stack Overflow用户

发布于 2020-01-15 22:46:32

就优化而言,您应该考虑Scilab (以及它的其他数学编程语言MATLAB和Octave)本质上是向量化的。这意味着,如果您使用的for loops太多,您可能应该回去阅读一些文档和教程。您编写的代码的规范版本可以实现为:

代码语言:javascript
运行
复制
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。

    1. 23.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59653668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档