我有一个图形表示,每个节点都包含(int id, String categoryName)
。它由大约500,000个节点组成。现在说我想检查图中是否存在categoryName "computing"
,这是否意味着我必须像使用BSF方法一样遍历整个图形? (如果我错了,请纠正我)。现在它很慢(需要大约3分钟)检查是否存在categoryName,有关如何提高搜索速度和比较字符串值的任何建议?
答案 0 :(得分:2)
如果您没有其他数据 - 那么是的,将需要搜索图表。
但是,您可以预处理并使用从字符串映射到实际节点的Map<String,Node>
(其中Node
是您的节点类),并快速查找某个String
有一个相关的节点。
您可以使用:map.get(string)
您可以使用TreeMap
(其中包含O(logn)搜索和插入时间并且已订购)和HashMap
(实现哈希表并且平均O(1)
案件寻求和插入时间)
注意:这假定没有重复,即没有字符串有两个不同的节点代表它。
如果这个假设不正确,你可以使用像Guava Multimap