技术问询:如何从给定绝对路径中筛选出含等量底层文件的L个根文件夹
问题描述
给定N个最大长度为M的绝对文件路径,这些路径分布在K个任意层级嵌套的文件夹中,需要找出L个根文件夹(L≤K),使得每个文件夹包含的底层文件数量尽可能相等。
示例输入路径:
/folderA/file1 /folderA/folderB/file2 /folderA/folderB/file3 /folderA/folderB/folderC/file4 /folderD/file5
解决步骤
- 构建文件系统树
解析所有文件路径,建立层级树结构,每个节点对应一个文件夹。为每个文件夹节点计算其底层文件总数:即该文件夹及其所有子文件夹中包含的文件总量。 - 生成候选文件夹列表
收集所有文件夹节点,需注意:若一个文件夹是另一个的子文件夹,两者不能同时作为候选(否则会重复统计文件)。 - 选择最优L个文件夹
计算目标平均值:总文件数 / L。从候选列表中挑选L个互不包含的文件夹,要求它们的文件数总和等于总文件数,且每个文件夹的文件数尽可能接近目标平均值。可采用贪心算法优先选择最接近平均值的节点,再从剩余未覆盖文件中继续筛选;或用动态规划方法找到最均衡的组合。
示例演示
以给定示例输入为例:
- 总文件数:5
- 各文件夹的底层文件数:
/folderA:4(包含file1、file2、file3、file4)/folderA/folderB:3(包含file2、file3、file4)/folderA/folderB/folderC:1(仅包含file4)/folderD:1(仅包含file5)
假设L=2,目标平均值为2.5:
唯一符合条件的组合是/folderA(4个文件)和/folderD(1个文件)——其他组合(如/folderA/folderB和/folderA)存在包含关系,会重复统计文件,不符合要求。
若L=3,目标平均值约为1.67:
由于前三个文件夹存在嵌套包含关系,无法同时选择三个互不包含的现有文件夹覆盖所有文件,只能选择最接近均衡的组合,比如/folderA/folderB/folderC(1)、/folderD(1),再结合/folderA中独立于/folderA/folderB的文件(file1),但这部分没有对应独立文件夹,因此实际只能接受一定程度的不均衡。
内容的提问来源于stack exchange,提问作者chicken-rice
相关产品推荐
相关产品推荐

