Je regarde un pseudocode pour un algorithme. Une ligne du pseudo-code est la suivante:
hs <- {(a, b) | a <- m, b <- l}
Où m
et l
sont tous deux des tableaux d'objets.
Qu'est-ce que cela signifie exactement? Mon interprétation est qu'il associe chaque m
à chaque l
et les stocke dans le tableau hs
, comme ceci:
Supposons que m = {m1, m2}
et l = {l1, l2, l3, l4}
.
Puis hs = {(m1, l1), (m1, l2), (m1, l3), (m1, l4), (m2, l1), (m2, l2), (m2, l3 ), (m2, l4)}
Est-ce la bonne façon d'y penser?
Comme le contexte a été demandé, il s'agit d'un pseudo-code pour la conception d'une hyper heuristique, utilisant la sélection de roulette basée sur l'apprentissage par renforcement. m
et l
contiennent un tableau d'heuristiques de mutation et d'heuristique de recherche locale, respectivement. hs
est conçu comme un tableau qui associe chacune de ces heuristiques, afin qu'elles puissent être appliquées au domaine du problème de manière séquentielle. Comme dans, appliquez heuristique mutationnelle m_i
puis heuristique de recherche locale l_j
. Il n'est tout simplement pas clair s'ils doivent être associés de la manière que j'ai décrite, ou d'une autre manière.
3 Réponses :
Ce que vous pensez être correct, c'est une liste par définition de compression, et (a, b)
est un ensemble avec les a
et b code> valeur.
Plus d'informations: https://en.wikipedia.org/wiki/List_comprehension < / p>
Exemple dans haskell: https://wiki.haskell.org/List_comprehension
Oui, mon premier instinct était que c'était une compréhension de liste de type Haskell quand j'ai vu cela, d'où ma suggestion d'interprétation. Je pense que vous avez probablement raison!
Oui, mais ce n'est pas comme a for inside a for, si les m ou l ont une taille différente, un résultat possible est {(a1, b1), (a2, b2), (a3, b3), (a4)}
En effet, mais comme il s'agit d'une heuristique de recherche locale itérée, dans laquelle vous avez une heuristique de mutation appliquée à un domaine de problème, suivie de l'application d'une heuristique de recherche locale, ce processus échouerait si nous avions a4
seul comme vous l'avez montré?
Si cette ligne de pseudocode doit être interprétée comme la notation mathématique d'un ensemble, alors oui, c'est la seule option plausible à mon humble avis.
Je pense que votre interprétation est assez juste, mais cela peut aussi être raisonnable:
Si nous obtenons votre exemple de vars:
hs = ({m1, m2}, {l1, l2, l3, l4})
cela peut être considéré comme une sorte de coordonnée pour un espace discret.
Si vous fournissez un contexte (ou un pseudocode complet), nous pourrions faire une interprétation plus précise
Mais ce hs = ({m1, m2}, {l1, l2, l3, l4})
est un ensemble de deux groupes.
Si nous pensons mathématiquement, vous avez raison {
}
désigne un ensemble. Mais dans ce cas en raison de la nature d'un ensemble on ne peut pas regrouper sous cette forme: hs = {(m1, l1), (m1, l2), (m1, l3), (m1, l4), ( m2, l1), (m2, l2), (m2, l3), (m2, l4)}
car un ensemble est une collection non ordonnée et vous pouvez «déterminer une combinaison spécifique. Cela a plus de sens pour moi si nous pensons {
}
comme une notation de tableau comme vous le faites dans votre question.
Le contexte a été donné, merci pour la suggestion
Qui sait? Cela pourrait signifier n'importe quoi car il n'y a pas de pseudocode standardisé. D'où est ce que ça vient?
"hs est conçu comme un tableau qui associe chacune de ces heuristiques" est une liste définie par compréhension, vérifiez l'exemple en haskell, ce langage utilise une notation très similaire à la notation mathématique