【问题标题】:Java traverse a large HashMap like a graphJava 像图一样遍历一个大的 HashMap
【发布时间】:2012-04-18 13:38:16
【问题描述】:

我有一个大号HashMap<String,Set<String>>,这样说:

    {INDIANBATSMAN=[INDIAN, CRICKETER], COMPANY=[THING],
 INDIAN=[LIVING], LIVING=[THING], PERSON=[LIVING],
 CRICKETER=[PERSON], CANADIAN=[LIVING], SCANDINAVIAN=[LIVING]}

这实际上对应于图结构,这意味着每个键与其值集之间存在边。我想遍历每个链接并找到从初始节点可到达的所有节点作为我的键的值集。

喜欢,

INDIANBATSMAN=[INDIAN,LIVING,THING,CRICKETER,PERSON]

完成这项工作的最有效方法应该是什么? (目前,我正在将其转换为邻接矩阵,由于我的地图很大,因此效率非常低。)

【问题讨论】:

    标签: java recursion graph hashmap


    【解决方案1】:

    您当前的表示 (Map<String, Set<String>>) 称为 adjacency list,非常适合标准遍历算法,例如广度优先或深度优先。

    应该这样做:

    visited = empty set
    q = empty list
    q.add(startNode)
    visited.add(startNode)
    while (q is non-empty)
        Node n = q.removeFirst()
        process(n)
        Set<String> children = yourMap.get(n)
        for (Node child : children)
            if (! visited contains child)
                visited.add(n)
                q.add(child)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-18
      • 2015-02-13
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      • 2020-05-06
      • 2017-03-29
      • 2011-03-10
      相关资源
      最近更新 更多