我不是一個Matlab用戶,但我現在只是試圖使用它創建一個快速和髒的二維圖來說明相對的O-notation複雜性,以避免手工繪製它。我使用的是Matlab版本R2010b,我沒有附加的工具包。我的問題由兩部分組成。我想在同一個圖上繪製下列情況的地塊:MATLAB:繪製值的極限範圍
O(1)
O(lg2 n)
O(n)
O(n lg2 n)
O(n * n)
O(2^n)
O(n!)
我的代碼在本文的結尾。
問題1:雖然我已經指定了n和我的座標軸極限值的範圍,但我很明白,n平方和n因子的值將大大超出所需的y軸範圍。發生這種情況時,它會大大壓縮y軸圖以適應該輸出範圍。我怎樣才能指定y的值不應該超出y軸本身所需範圍的理想範圍?
問題2:在下面的代碼中,表達式n * log2(n)會導致錯誤,指出「內部矩陣維度必須一致」。當我嘗試通過簡單地執行n * n來計算n-squared時,我得到了同樣的錯誤,但我可以通過將其更改爲n^^來解決該問題。表達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);