【问题标题】:How to find duplicate child nodes having more than one parent in a file system?如何在文件系统中查找具有多个父节点的重复子节点?
【发布时间】:2014-12-29 07:10:58
【问题描述】:

在定制的内存文件系统中,我的文件和目录采用树的形式,其中目录具有对可以是目录或文件的子节点的引用。 我可以对文件和目录进行添加、删除、删除、移动操作。现在由于某种错误,每当文件从父节点移动到另一个父节点时,它的引用不会从早期的父节点中删除。

示例

D1 (parent ) C1 ( child )
after move
D1 (parent ) C1 (child)
D2 (parent ) C1 (child)

问题: 现在的问题是找出所有具有重复父项的所有此类文件的最佳方法是什么?现在我将所有文件引用保存在一个全局哈希集中,如果我有大量文件,这猜测会很痛苦?

注意::父母知道它的所有孩子,但孩子不知道它的父母。

到目前为止采用的方法: 我正在考虑的方法是首先遍历整个目录结构,然后将所有文件引用保存在哈希集中,然后在向哈希集中插入任何值之前,我将检查它是否已经存在,如果是,那么这是一个具有重复父节点的损坏文件。

import java.io.File;
import java.util.HashSet;
import java.util.Set;

public class RecursiveFiles {
    private static Set<File> set = new HashSet<File>();

    public static void main(String[] args) {
        File root = new File("C:\\Windows\\Help");
        showFiles(root);
    }

    private static void showFiles(File root) {
        if(root.isDirectory()){
            File[] children = root.listFiles();
            for(File child : children){
                showFiles(child);
            }   
        }else {
            if(set.contains(root)){
                System.out.println("Duplicate File " + root);   
            }else {
                set.add(root);
            }
        }
    }

}

【问题讨论】:

    标签: java algorithm graph-algorithm


    【解决方案1】:

    如果将文件视为节点,将父身份视为边,那么您可以使用 bfs/dfs 算法,但稍作更改,而不是布尔访问状态,使用每个节点的已访问列表,并在列表中保留所有访问该节点的父地址。还要考虑您的图是直接图,因此没有人可以访问他的父母。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 2016-03-11
      • 1970-01-01
      相关资源
      最近更新 更多