Путаница в обозначениях массива псевдокода

Я ищу какой-то псевдокод для алгоритма. Одна строка псевдокода такова:

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

Где m и l - массивы объектов.

Что именно это означает? Моя интерпретация состоит в том, что он объединяет каждый 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)}

Правильно ли так думать об этом?


В соответствии с запросом контекста это псевдокод для разработки гиперэвристики с использованием выбора колеса рулетки на основе обучения с подкреплением. m и l содержат массив эвристик мутаций и эвристик локального поиска соответственно. hs задуман как массив, который объединяет каждую из этих эвристик, чтобы их можно было последовательно применять к проблемной области. Как и в случае, примените mutational heuristic m_i, а затем local search heuristic l_j. Просто не ясно, должны ли они быть спарены так, как я описал, или как-то иначе.


person Data    schedule 29.04.2019    source источник
comment
Кто знает? Это может означать что угодно, поскольку нет стандартизированного псевдокода. Откуда это взялось?   -  person NeplatnyUdaj    schedule 29.04.2019
comment
hs задуман как массив, который объединяет каждую из этих эвристик вместе, представляет собой список, определяемый сжатием, проверьте пример в haskell, этот язык использует нотацию, очень похожую на нотацию math   -  person Tlaloc-ES    schedule 29.04.2019


Ответы (3)


Что вы считаете правильным, это список по определению понимания, а (a, b) - это набор со значениями a и b.

Дополнительная информация: https://en.wikipedia.org/wiki/List_comprehension

Пример в haskell: https://wiki.haskell.org/List_comprehension

person Tlaloc-ES    schedule 29.04.2019
comment
Да, когда я это увидел, моим первым инстинктом было понимание того, что это список, подобный Haskell, отсюда и моя предложенная интерпретация. Думаю, вы, наверное, правы! - person Data; 29.04.2019
comment
Да, но это не похоже на a for внутри a for, если m или l имеют другой размер, возможный результат будет {(a1, b1), (a2, b2), (a3, b3), (a4)} - person Tlaloc-ES; 29.04.2019
comment
В самом деле, но поскольку это для повторяющейся эвристики локального поиска, в которой эвристика мутации применяется к проблемной области с последующим применением эвристики локального поиска, этот процесс не удался бы, если бы у нас был a4 сам по себе, как вы показано? - person Data; 29.04.2019

Если эту строку псевдокода следует интерпретировать как математическую нотацию для набора, то да, это единственный правдоподобный вариант ИМХО.

person TheEye    schedule 29.04.2019

Я думаю, что ваша интерпретация вполне верна, но это тоже может быть разумным:

Если мы получим ваши примеры vars:

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

его можно представить себе как некую координату дискретного пространства.

Если вы предоставите контекст (или полный псевдокод), мы сможем дать более точную интерпретацию

person VYago    schedule 29.04.2019
comment
Но этот hs = ({m1, m2}, {l1, l2, l3, l4}) набор из двух групп. - person Tlaloc-ES; 29.04.2019
comment
Если мыслить математически, вы правы { } обозначает набор. Но в этом случае из-за природы набора мы не можем группировать в этой форме: hs = {(m1,l1),(m1,l2),(m1,l3),(m1,l4),(m2,l1),(m2,l2),(m2,l3),(m2,l4)}, потому что набор является неупорядоченной коллекцией, и вы можете 'определить конкретную комбинацию. Для меня будет более разумным, если мы будем думать { } как обозначение массива, как вы в своем вопросе. - person VYago; 29.04.2019
comment
Контекст предоставлен, спасибо за предложение - person Data; 29.04.2019