目前,从上一次产品迭代开始,我的连接检查从每个根节点开始,并跟踪所有连接。对于每个找到的节点,将在位图中设置一个位,以便您可以快速检查是否已经找到/处理了一个节点。一旦遵循了所有根节点的所有路径,就将完整的节点集与“找到的”位图进行比较,以显示所有未连接的节点。
以前,UID是顺序的,我可以合并它们以消除差距。因此,使用第一个ID作为偏移量,我只是使找到的数组相当大,并使用UID直接将找到的节点索引到位图中(即,如果我找到了节点1000,则将位图中的第1000位设置)。但是,在该产品的当前版本中,我对节点UID的控制较少。我无法整合它们,并且第三方交互无法预测地产生了很大的差距(例如,UID可能从成千上万跃升至数千万)。我遇到了一些实例,这些实例的位图数组太小而无法容纳间隙,并且连接检查失败。
现在,我可以继续增加位图数组的大小,但这总是冒着体积太小且资源效率不高的风险。因此,我正在寻求将其替换为其他东西。显然,我希望它尽可能快并且资源效率更高-我认为我需要某种哈希映射。不幸的是,我必须在Fortran中进行这项工作,因此我无权访问
将UID哈希化为查找结构的最佳方法是什么,以便可以轻松检查是否已找到该节点?
答案 0 :(得分:0)
如果您可以自己修改节点类型,则可以添加一个found
字段,并使用该字段?
如果这不可能,那么是的,哈希表听起来是显而易见的解决方案。根据UID的分配方式,您可能会遇到像mod(UID, bitmap_size)
这样简单的事情。但是,您仍然需要以某种方式处理冲突。关于该主题的文献很多,因此,在这里我将不作赘述,只是要指出,鲁棒性哈希非常酷(除非一次性使用可能有点复杂)。