繁体   English   中英

在图中查找“连接的组件”

[英]Find 'connected components' in graph

我正在使用HashMap <String,ArrayList<String>>构建一个词库来保存单词及其同义词(此数据结构是必需的)。

为了分配的目的,同义词关系被认为是可传递的。 (我们可以将同义词库想象为图表)。 我要完成的工作是在一个文本文件中打印此图,并在每一行上连接一个组件。 换句话说,所有可以作为同义词集合在一起的词都应该放在一行上。

public void save() {
    try {
        FileWriter fw = new FileWriter(defaultDefinitionFile);
        BufferedWriter out = new BufferedWriter(fw);
        Set<String> keys = thesaurus.keySet();
        Iterator<String> ite = keys.iterator();
        while (ite.hasNext()) {
            String key = ite.next();
            out.write(key);
            ArrayList<String> synonyms = thesaurus.get(key);
            Iterator<String> i = synonyms.iterator();
            while (i.hasNext()) {
                String syn = i.next();
                out.write(","+syn);
                keys.remove(syn);
            }
            out.write("\r\n");
        }
        out.close();
        fw.close();
    }
    catch (Exception e) {
        System.out.println("Error writing to file");
        e.printStackTrace();
    }
}

这就是我想象的情况:

打印一个单词及其每个同义词,然后从数据结构中删除这些同义词,因此我们没有重复的行。

问题是,当我遍历哈希图的内容时,我无法删除任何内容。

还有其他替代方法吗?

PS:我一直在保留“图形”的比喻,只是因为我需要标题雄辩而简洁。 我知道这个比喻的用处有限。

您可以存储已打印到Set中的单词,然后仅处理尚未出现在Set中的单词。

旁注 :尽管确实可以将其视为一个图形问题,但您的代码并未如此对待。 如果我们将其视为图问题,则不会假设每个单词的所有同义词都列在相应的ArrayList ,因此需要计算对称和可传递闭包。 只有这样,我们才能提取等价类。

(我知道,实际上同义词关系不是可传递的。)

我不是这个(您的一般想法)会因为“一致性”不是传递属性而起作用。

有很多带有同义词的单词,这些单词本身并不是同义词。

与其删除项目,不如将其添加到要忽略的项目列表中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM