HTML Diff
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>