void foo(float[] array, int start, int end){
if((end-start) <=1) return;
int x = (end-start)/5;
int y = 2*x;
int z = 4*x;
foo(array,start,start+y);
for(index = y; index < z; index++){
array[index]++;
}
foo(array, start+z, end);
}
我得到的for循環的初始化被執行N + 1次,而內部碼被執行N次,則意味着時間複雜度將是O((N +1)*(N))= O(n^2)。但是在這種情況下如何計算N?我該如何處理遞歸調用?我怎樣才能將這些信息轉換成Big O符號?計算運行程序的時間(大O符號)
請不要說這是一個重複的問題。我明白,其他例子也存在類似的問題,但這個例子對我來說是抽象的,學習如何解決這個問題會在很多其他情況下幫助我。
O(N + 1(N))≠O(N 2)。 O(N + N)= O(2N)= O(N)(因爲在Big-O表示法中我們通常忽略常量)。 –
'x','y'和'z'在您的代碼註釋中不是常量。它們來自'n = end-start'。 – Trenin
但是他們的最壞情況計算時間是不變的。 –