伪代码数组符号混淆

Pseudocode array notation confusion

我正在查看算法的一些伪代码。其中一行伪代码是这样的:

hs <- { (a, b) | a <- m, b <- l }

其中 ml 都是对象数组。

这到底是什么意思?我的解释是它将每个 m 与每个 l 配对并将它们存储在数组 hs 中,如下所示:

假设 m = {m1,m2}l = {l1,l2,l3,l4}.

然后hs = {(m1,l1),(m1,l2),(m1,l3),(m1,l4),(m2,l1),(m2,l2),(m2,l3),(m2,l4)}

这是正确的思考方式吗?


根据上下文要求,这是用于设计超启发式算法的伪代码,使用基于强化学习的轮盘赌选择。 ml 分别包含一组突变启发式和局部搜索启发式。 hs 旨在作为一个数组,将这些启发式中的每一个配对在一起,以便它们可以按顺序应用于问题域。如,应用 mutational heuristic m_i 然后 local search heuristic l_j。只是不清楚它们是否应该按照我描述的方式或其他方式配对。

你认为是正确的,这是一个综合定义的列表,(a, b)是一个集合ab的值。

更多信息:https://en.wikipedia.org/wiki/List_comprehension

haskell 中的示例:https://wiki.haskell.org/List_comprehension

如果要将那行伪代码解释为集合的数学符号,那么是的,恕我直言,这是唯一合理的选择。

我觉得你的解释很对,但也有道理:

如果我们得到您的示例变量:

hs = ({m1, m2}, {l1, l2, l3, l4})

它可以被认为是离散 space 的某种坐标。

如果您提供上下文(或完整的伪代码),我们可以做出更精确的解释