Примечания: Это проблема 4,3 из Крекинг кодирвоания Интервью 5th EditionБудет ли этот алгоритм работать в O (n)?
Проблема: Учитывая отсортированный (порядок возрастания) массив, написать алгоритм для создания бинарного дерева поиска с минимальной высотой
Вот мой алгоритм, написанный на Java, чтобы сделать эту проблему
public static IntTreeNode createBST(int[] array) {
return createBST(array, 0, array.length-1);
}
private static IntTreeNode createBST(int[] array, int left, int right) {
if(right >= left) {
int middle = array[(left + right)/2;
IntTreeNode root = new IntTreeNode(middle);
root.left = createBST(array, left, middle - 1);
root.right = createBST(array, middle + 1, right);
return root;
} else {
return null;
}
}
Я проверил этот код против автора, и это почти идентичны.
Однако мне сложно анализировать временную сложность этого алгоритма.
Я знаю, что это не будет работать в O (logn) как Binary Search, потому что вы не выполняете столько же работы на каждом уровне рекурсии. E.G на первом уровне, 1 единица работы, 2-й уровень - 2 единицы работы, 3-й уровень - 4 единицы работы, вплоть до регистрации (n) уровень - n единиц работы.
Так основаны от того, количество шагов, этот алгоритм требует будет ограничена сверху этим математическим выражением
, который после просмотра Infinite geometric series, я оценил в
или 2n, которые будет в O (n)
Вы согласны с моим работа здесь и что этот алгоритм будет работать в O (n) или я что-то пропустил или он действительно работает в O (nlogn) или какой-либо другой класс функций?
Да, это O (n). Я бы сделал это ответом, если бы у меня было более четкое представление о том, что является хорошим доказательством сложности. – Beta
@Beta Как вы смогли рассказать без доказательства? – committedandroider
Я видел, что алгоритм вызывает себя дважды, каждый раз на n/2 элементах, с O (1) дополнительной работой и удалением одного элемента. Я не думаю, что это строгое доказательство (как в «Пусть' f (n) »и« g (n) »являются такими функциями, что ...»), но этого было достаточно, чтобы я мог видеть это в моей голове, как кусок струны, нарезанный кусочками и выложенный без перекрытия. – Beta