我根本不是 Matlab 用户,但我现在只是想使用它创建一个快速而肮脏的 2D 图来说明相对 O-notation 的复杂性,以避免手工绘制它。我使用的是 Matlab 版本 R2010b,我没有额外的工具包。我的问题由两部分组成。我想在同一个情节上绘制以下案例的情节:
O(1)
O(lg2 n)
O(n)
O(n lg2 n)
O(n * n)
O(2 ^ n)
O(n!)
我的代码在这篇文章的末尾。
问题 1:虽然我已经指定了 n 的值范围和我想要的轴限制,但显然 n-squared 和 n-factorial 的值将大大超出所需的 y 轴范围。发生这种情况时,它会大大压缩 y 轴图以适应该范围的输出。如何指定不应将 y 的值绘制在 y 轴本身所需范围的所需范围之外?
问题 2:在我下面的代码中,表达式 n * log2(n) 导致错误指出“内部矩阵尺寸必须一致”。当我尝试通过简单地执行 n * n 来计算 n 平方时,我遇到了同样的错误,但我能够通过将其更改为 n.^2 来解决这个问题。表达 n * log2(n) 的正确方法是什么?
谢谢,雷
grid on
axis([0,40,0,200]);
n = 0:1:40;
O_1 = 0;
O_log2_n = log2(n);
O_n = n;
O_n_log2_n = n * log2(n); % Doesn't work this way
O_log2_nSq = n.^2;
O_log2_nFact = factorial(n);
plot(n, O_1, n, O_log2_n, n, O_n, n, O_n_log2_n, n, O_log2_nSq, n, O_log2_nFact);
text(37, 37, ' O(n)', 'HorizontalAlignment','left','FontSize',12);
set(gca, 'XTick', [0, 10, 20, 30, 40]);
set(gca, 'YTick', [0, 50, 100, 150, 200]);
xlabel('n','FontSize',16);
ylabel('T(n)','FontSize',16);
title('\it{Comparative algorithm growth rates}','FontSize',16);