图解问题的并发解

时间:2011-01-07 06:38:07

标签: algorithm concurrency graph filter

问候Overflowers,

  • 我们的算法需要接收一个 查询DAG结构和输出 满足该命中的命中列表 曲线图。
  • 图中的每条边指向a 唯一的对象列表 过滤。
  • 每个对象都有两个值,比如HEAD 和TAIL。
  • 通过有向边连接节点 在图中类似于HEAD和TAIL 这些物品。
  • 例如,查询DAG为三 连接的节点需要两个对象 (每个边缘列表中的一个)在哪里 一个人的HEAD等于另一个人的TAIL。
  • 等等更复杂的DAG 查询。
  • 因此,算法的作用是 返回所有可能的对象 实现这一目标的排列 HEAD / TAIL共享(相等) 标准。
  • 一次点击就是可能的 此类对象的排列列表。

我们目前的解决方案如下:

  • 按HEAD / TAIL排序,然后按顺序列表 按长度递增(最短 第一)。
  • 迭代来自的对象 最短的清单。
  • 二进制搜索下一个对象 共享HEAD / TAIL值的列表 与最后一个对象 搜索列表直接连接到 它。
  • 如果列表中不存在此类对象, 回到上一个列表并尝试 将其下一个对象排序。
  • 如果下一个对象与其匹配 边缘/列表标准,我们继续前进 再次,否则我们回去等等 上。
  • 如果我们达到最长的名单,那么我们 受到所有人的打击 每个列表中与之匹配的对象 整体DAG标准。
  • 返回上一个列表并尝试 直到我们到达底部 第一个最短的清单。

如您所见,我们只需在线程之间均匀划分第一个列表。 但是,这可能导致不同线程上的负载不平衡。 因此,搜索列表的顺序可能会影响性能。 我们选择使用最短到最长的跳跃,以便在我们到达更长的列表之前检测到未命中,我们尝试线性而非二进制。 如果我们选择最长到最短,我们可以实现完美的平衡,但总是必须完全迭代影响性能的最长列表。

你觉得这个平衡是什么? 这是一个标准的算法问题,有一个我可以google的名字吗? 是否可以同时遍历可以实现更好性能的DAG?

非常感谢!

0 个答案:

没有答案