這似乎是基於關歸併的搜索算法。它用於一個有序數組。大O的複雜性仍然是O(n log n)?算法的大O分析?
public static boolean fastSearch(int[] data, int min, int max, int target)
{
int N = data.length;
boolean found = false;
int midpoint = (min+max)/2; // determine the midpoint
if (data[midpoint] == target) {
found = true;
} else {
if (data[midpoint] > target) {
if (min <= midpoint - 1) {
// Recursion on the left half of the array
found = fastSearch(data, min, midpoint-1, target);
}
} else {
if (midpoint + 1 <= max) {
// Recursion on the right half of the array
found = fastSearch(data, midpoint+1, max, target);
}
}
}
return found;
}
這是我自己的分析我沒有,我只是想確認我是否正確與否:
每次通過數據加倍小節的大小。這些需要重複加倍直到找到目標。它需要log(n)加倍,並且數據的每次傳遞都與項目的數量成正比。所以,它是O(n log n)。
可以請你縮進代碼,並加括號?我正在努力成爲一名人類編譯器。 – PaulProgrammer
「,並且數據的每次通過與項目的數量成比例」。你確定嗎? :) – Guido
如果這是[二進制搜索](http://en.wikipedia.org/wiki/Binary_search_algorithm)的實現,則運行時間應該是'O(log n)'。這就是說,我不能說這是基於你的格式的正確實施。 –