我正在學習算法和數據結構,現在我正在考慮時間和空間的複雜性。遞歸函數的空間複雜度估計
我必須解決一個問題,他們告訴(根據我的代碼)時間和空間的複雜性。
這是代碼:
public class B {
public static int minSum = -1;
public static void main(String[] args) {
int objects, sumA = 0, sumB = 0;
Scanner readInput = new Scanner(System.in);
objects = readInput.nextInt();
int[] trunk = new int[objects];
if (objects == 0) {
System.out.print(0 + "\n");
} else if (objects == 1) {
trunk[0] = readInput.nextInt();
System.out.print(trunk[0] + "\n");
} else {
for (int i = 0; i < objects; i++) {
trunk[i] = readInput.nextInt();
}
bruteforce(trunk, sumA, sumB, 0);
System.out.println(minSum);
}
}
public static void bruteforce(int[] trunk, int sumA, int sumB, int index) {
int partialDiff;
if (minSum == 0) {
System.out.println(minSum);
System.exit(0);
} else if (index == trunk.length) {
partialDiff = Math.abs(sumA - sumB);
if (partialDiff < minSum || minSum == -1) {
minSum = partialDiff;
}
} else {
bruteforce(trunk, sumA + trunk[index], sumB, index + 1);
bruteforce(trunk, sumA, sumB + trunk[index], index + 1);
}
}
}
基本上用戶首先輸入號碼的對象,然後輸入的,對於每個對象,它的值。該算法將通過兩個袋子來分配物體,並且必須計算當通過兩個袋子分配物體時可以計算的最小差異。
我相信它需要指數時間,但我正在爲空間複雜性進行估計。你能指出我在某個方向嗎?
甜。非常感謝。只是爲了澄清。這是O(2^n)時間複雜度不是嗎? – Favolas
是的,我相信是這樣,每個函數調用創建2個分支,所以你最終得到2^n個分支,因此O(2^n)。 – Dukeling
感謝您的解釋 – Favolas