嗨,大家好我明天有一個算法分析考試,我在網上發現了這個問題。我試圖解決這個問題,但我只需要你檢查我的解決方案是正確的找到算法的複雜性
public class t {
public static void main(String[] args) {
System.out.println(mystery(7, 6));
}
public static int mystery(int a, int b) {
if (b == 0) return 0;
return mystery(a * 2, b/2) + a;
}
}
我的回答: 這個算法有O(LOGN)的複雜性 因爲每次b的一半rediced直到我們到達 終止條件是1.
聽起來對我很好。然而,正如蒂莫西指出的那樣,你需要小心N的定義。例如,如果N是輸入的位數,那麼你的算法實際上是O(N)。 (並且一個O(b)算法將是O(2^n)) – hugomg