Java像图形一样遍历大型哈希映射
我有一个大的Java像图形一样遍历大型哈希映射,java,recursion,graph,hashmap,Java,Recursion,Graph,Hashmap,我有一个大的HashMap,这样说: {INDIANBATSMAN=[INDIAN, CRICKETER], COMPANY=[THING], INDIAN=[LIVING], LIVING=[THING], PERSON=[LIVING], CRICKETER=[PERSON], CANADIAN=[LIVING], SCANDINAVIAN=[LIVING]} 这实际上对应于一个图形结构,这意味着每个键与其值集之间都有边。我希望遍历每个链接,并找到从初始节点可以访问的所有节点,
HashMap
,这样说:
{INDIANBATSMAN=[INDIAN, CRICKETER], COMPANY=[THING],
INDIAN=[LIVING], LIVING=[THING], PERSON=[LIVING],
CRICKETER=[PERSON], CANADIAN=[LIVING], SCANDINAVIAN=[LIVING]}
这实际上对应于一个图形结构,这意味着每个键与其值集之间都有边。我希望遍历每个链接,并找到从初始节点可以访问的所有节点,作为我的键的值集
像
INDIANBATSMAN=[INDIAN,LIVING,THING,CRICKETER,PERSON]
完成这项工作最有效的方法是什么?(目前,我正在将其转换为邻接矩阵,因为我的地图很大,所以效率很低。)您当前的表示(
map
)称为,非常适合于标准的遍历算法,如广度优先或深度优先
这样做应该可以:
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)
visted=空集
q=空列表
q、 添加(开始节点)
已访问。添加(startNode)
while(q为非空)
节点n=q.removeFirst()
过程(n)
Set children=yourMap.get(n)
用于(节点子节点:子节点)
如果(!包含子项)
已访问。添加(n)
q、 添加(子项)
您当前的表示(Map
)称为,非常适合于标准的遍历算法,如宽度优先或深度优先
这样做应该可以:
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)
visted=空集
q=空列表
q、 添加(开始节点)
已访问。添加(startNode)
while(q为非空)
节点n=q.removeFirst()
过程(n)
Set children=yourMap.get(n)
用于(节点子节点:子节点)
如果(!包含子项)
已访问。添加(n)
q、 添加(子项)