- ( ) ? " " ( - ) ...?
, , U V [] O (1) ; -).
: , , , - :
import itertools as it
import collections
L = ['a', 'ab', 'bba']
M = ['baa', 'aa', 'bb']
def cmbs(L=L, M=M):
Ucans = collections.defaultdict(list)
Vcans = collections.defaultdict(list)
sides = (L, Vcans, Ucans), (M, Ucans, Vcans)
for i in it.count(1):
for k, (G, Ocans, Tcans) in enumerate(sides):
for u in it.product(G, repeat=i):
j = ''.join(u)
if j in Ocans:
for samp in Ocans[j]:
result = samp, u
yield result[1-k], result[k]
Tcans[j].append(u)
if __name__ == '__main__':
for x, y in it.islice(cmbs(), 10):
print x, y, ''.join(x), ''.join(y)
('a', 'a') ('aa',) aa aa
('bba', 'a') ('bb', 'aa') bbaa bbaa
('a', 'a', 'a', 'a') ('aa', 'aa') aaaa aaaa
('a', 'a', 'bba', 'a') ('aa', 'bb', 'aa') aabbaa aabbaa
('a', 'ab', 'a', 'a') ('aa', 'baa') aabaa aabaa
('a', 'ab', 'bba', 'a') ('aa', 'bb', 'baa') aabbbaa aabbbaa
('bba', 'a', 'a', 'a') ('bb', 'aa', 'aa') bbaaaa bbaaaa
('bba', 'ab', 'a', 'a') ('bb', 'aa', 'baa') bbaabaa bbaabaa
('bba', 'ab', 'bba', 'a') ('bb', 'aa', 'bb', 'baa') bbaabbbaa bbaabbbaa
('bba', 'a', 'bba', 'a') ('bb', 'aa', 'bb', 'aa') bbaabbaa bbaabbaa
, O (N) - N ?! -)
2: ( ) dicts , , , > 1 (a , , ); , L ['a', 'aa'] , s > 1 a - , , M, .