Изменения

Перейти к: навигация, поиск

Монотонный код Грея

112 байт добавлено, 13:32, 24 июня 2019
м
Нет описания правки
<code>'''yield'''</code> {{---}} аналог <code>'''return'''</code> только для функций-генераторов. То есть генераторы это тоже итерируемые объекты, но прочитать их можно лишь один раз. Это связано с тем, что они не хранят значения в памяти, а генерируют их на лету.
С конструкциями типа <code>(0,)</code> или <code>(1,)</code> все проще. Используя ее совместно с <code>'''yield'''</code> мы можем в изменять наш генерируемый объект. Например, <code>'''yield''' (0,)</code> допишет к генерируемому объекту (в нашем случае кортежу (англ. ''tuple'')) <tex>0</tex> в начало.
{| border="0"
|align="left" colspan="4"|
Принимает <tex>n, j</tex>, а так же дополнительный параметр определяющий надо-ли переворачивать кортеж.
<code>
'''function''' p('''int''' n, '''int''' j, '''bool''' reverse = ''false''):'''list<int[n]>'''
'''if''' n == 1 and j == 0
'''if''' '''not''' reverse
'''yield''' (0,) + x
'''else'''
'''for''' x '''in''' p(n - 1, j, reverse=True''true'')
'''yield''' (0,) + x
'''for''' x '''in''' p(n - 1, j - 1, reverse=True''true'')
'''yield''' (1,) + '''tuple'''(x[k] '''for''' k '''in''' perm)
</code>
Генерация монотонного кода Грея при помощи уже написанного генератора <codetex>p</codetex>.
<code>
'''function''' monotonic('''int''' n):'''list<int[n]>'''
'''for''' i '''in''' range(n)
'''for''' x '''in''' (p(n, i) '''if''' i % 2 == 0 '''else''' p(n, i, reverse=True''true''))
'''yield''' x
</code>
[[Категория: Дискретная математика и алгоритмы]]
[[Категория: Комбинаторика]]
[[Категория: Комбинаторные объекты ]]
6
правок

Навигация