Может кто определить скррость и затрачиваемую этим алгоритмом память? Вроде

проход по всем нодам и потом еще на возврат это O(2n) | на память две переменные внутри функции это 2n + 1 или 3n? Сразу извиняюсь если фигню написал, просто не смыслю в этом. -- Надо найти ветвь минимальной длинны. Если одна из сторон null, то возвращаю максимальную длинну, потому что дальше ветви нет, если обе ветки ноды не равны нулю, получаю минимальное значение (одна из ветвей оказалась меньше другой)

6 ответов

17 просмотров
Сладкий- Автор вопроса

Такое потреблением памяти может быть из-за того, что на стеке также хранится переменная n. Кажется, что без неё можно успешно обойтись

А в чем великий смысл передачи глубины вниз? Вы ведь не тейлрек пишите

Еще момент - в асимптотической сложности не существует сложности 3N, то есть константы-множители выносятся за скобки, и не учитываются. Если говорить о скорости поиска минимума, то этот алгоритм можно оптимизировать. Во-первых, не нужно передавать n. Во-вторых, вызывать рекурсию только для ненулевых элементов, соответственно, проверка на null root не нужна, но появятся проверки на null для потомков, как только потомок null - возвращаем 0. Если оба потомка не null, возвращаем 1 + Math.Min(depth(root.right), depth(root.left));

Ну и может оказаться, что поиск в глубину лучше заменить на поиск в ширину, то есть BFS, где нужно будет отслеживать глубину каждого узла, и опять же - останавливаться сразу, как найден кто-то с хотя бы одним отсутствующим потомком.

Похожие вопросы

Обсуждают сегодня

Всем привет Есть достаточно базовая задача: Дан неориентированный граф. Требуется определить, есть ли в нем цикл, и, если есть, вывести его. Входные данные подаются в виде ма...
Αλeksandr
10
Привет всем. Подскажите, как можно данную задачу более менее эффективно решить? В столовой одного известного Завода вот-вот начнётся обед. На обеде есть три гарнира — макарош...
Vitaliy
6
всем привет. У меня есть неупорядоченный массив точек(в моем случае в трёхмерном пространстве). Есть критерий связанности точек: если евклидово расстояние между ними меньше за...
Павлик Ливаткин
31
Доброе утро. Такой вопрос: есть ли какие-то практически полезные меры вычислительной мощности (в смысле computational complexity) для реальных машин, с ограниченными ресурсам...
Yaroslav Schekin
15
Всем привет Пытаюсь решить следующую задачу: https://informatics.msk.ru/mod/statements/view.php?id=6992&chapterid=101#1 Строка S была записана много раз подряд, после чего из ...
Αλeksandr
10
Здравствуйте. Есть задача нужно найти наименшое число P где фактриал P делиться на 10^N. Ограничения 10^9. Знаю что нужно найти такой P в конце как минимум N нулей. Решение с ...
. Azmiddin
20
Друзья, практический вопрос надо счиать скользящую медиану в последовательности по заданному окну (длины N) тупой вариант - взять значения в окне, отсортировать, взять элеме...
Стас Выщепан
17
Должна-ли работать такая стратегия: Мы каждую секунду бросаем монетку - орел или решка. Если орел - покупаем акцию на все деньги, если у нас есть деньги, или продаем все акци...
George Polevoy
13
#pragma once #include <iostream> #include <vector> template <typename T, typename Comp = std::less<T>> class Heap { public: Heap() = default; Heap(const std::vector<T>&...
Степан
1
Как можно сжимать временные ряды в памяти? У меня есть исторические стоимости ценных бумаг. Данные для каждой минуты в истории OHLC (Open, High, Low, Close). Соответственно, O...
George Polevoy
10
Карта сайта