0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Агрегация данных - наиболее важная операция при работе с деревьями. Подсчитать общее число файлов в директории, общий размер всех файлов, получить список всех файлов, найти все файлы по шаблону, все это - примеры агрегирования данных.</p>
1
<p>Агрегация данных - наиболее важная операция при работе с деревьями. Подсчитать общее число файлов в директории, общий размер всех файлов, получить список всех файлов, найти все файлы по шаблону, все это - примеры агрегирования данных.</p>
2
<p>Ключевым моментом в агрегирующих операциях является накопление результата. Для данной задачи хорошо подходит обход дерева в глубину с использованием рекурсивного процесса, который подробно рассматривается в предыдущем уроке. С его помощью мы обходим все узлы дерева и собираем результат, начиная с самого нижнего уровня.</p>
2
<p>Ключевым моментом в агрегирующих операциях является накопление результата. Для данной задачи хорошо подходит обход дерева в глубину с использованием рекурсивного процесса, который подробно рассматривается в предыдущем уроке. С его помощью мы обходим все узлы дерева и собираем результат, начиная с самого нижнего уровня.</p>
3
<p>Рассмотрим агрегацию с использованием рекурсивного процесса на примере подсчета общего количества узлов в дереве. То есть мы хотим узнать сколько всего файлов и директорий содержится в нашем файловом дереве.</p>
3
<p>Рассмотрим агрегацию с использованием рекурсивного процесса на примере подсчета общего количества узлов в дереве. То есть мы хотим узнать сколько всего файлов и директорий содержится в нашем файловом дереве.</p>
4
<p>Кода здесь немного, но он довольно хитрый. Есть несколько ключевых моментов:</p>
4
<p>Кода здесь немного, но он довольно хитрый. Есть несколько ключевых моментов:</p>
5
<ol><li>Функция проверяет тип узла. Если узел - это файл, тогда из функции возвращается единица</li>
5
<ol><li>Функция проверяет тип узла. Если узел - это файл, тогда из функции возвращается единица</li>
6
<li>В случае, если узел - директория, тогда получаем детей и для каждого ребенка вновь вызываем нашу функцию. Затем повторяем алгоритм заново</li>
6
<li>В случае, если узел - директория, тогда получаем детей и для каждого ребенка вновь вызываем нашу функцию. Затем повторяем алгоритм заново</li>
7
<li>Вызов функции на каждом ребенке возвращает свой собственный результат (количество его потомков). Эти результаты образуют массив с числами, которые нужно объединить</li>
7
<li>Вызов функции на каждом ребенке возвращает свой собственный результат (количество его потомков). Эти результаты образуют массив с числами, которые нужно объединить</li>
8
<li>В конце считается общее количество всех потомков узла + единица (текущий узел сам по себе)</li>
8
<li>В конце считается общее количество всех потомков узла + единица (текущий узел сам по себе)</li>
9
</ol><p>Перед тем как двигаться дальше, с этим кодом нужно "поиграть". Это единственный способ разобраться с ним.</p>
9
</ol><p>Перед тем как двигаться дальше, с этим кодом нужно "поиграть". Это единственный способ разобраться с ним.</p>
10
<h2>Рекомендуемые программы</h2>
10
<h2>Рекомендуемые программы</h2>